【数据结构】【C】顺序栈

/* 文件一: 顺序栈头文件 */

#ifndef __SEQSTACK_H
#define __SEQSTACK_H
//#include <stdafx.h>
/* VS2012不支持bool,自己定义 */
#define bool int
#define true 1
#define false 0

#define MAXSIZE 1024
//typedef int ElemType;
typedef struct{
	//ElemType data[MAXSIZE];
	int data[MAXSIZE];
	int top;
}SeqStack;

/** 
  * 初始化
  * @param void				不接受参数
  * @return SeqStack *		返回指向SeqStack的指针
**/
extern SeqStack *init_Stack(void);

/**
  * 判断s是否为空
  * @param s				要操作的顺序栈s
  * @return bool true:入栈成功;	false:传参有误或空间不足
**/
extern bool empty_stack(SeqStack *s);

/**
  * 入栈
  * @param s				要操作的顺序栈s
  * @param val				入栈的元素val
  * @return bool true:入栈成功;	false:传参有误或空间不足
**/
extern bool push_stack(SeqStack *s, int val);

/**
  * 出栈
  * @param s				要操作的顺序栈s
  * @param val				保存弹出元素的指针
  * @return bool true:入栈成功;	false:传参有误或空间不足
**/
extern bool pop_stack(SeqStack *s, int *val);

/**
  * 读取栈顶元素
  * @param s				要操作的顺序栈s
  * @return ElemType		返回栈顶元素的值,若s为空栈则返回0
**/
extern int top_stack(SeqStack *s);

#endif
/* 文件二:顺序栈c文件 */
#include "SeqStack.h"
#include <stdlib.h>

// 顺序栈初始化
SeqStack *init_Stack(void){
	SeqStack *s = (SeqStack *)malloc(sizeof(SeqStack));
	s->top = -1;
	return s;
}

// 判空
bool empty_stack(SeqStack *s){
	if(s == NULL || s->top == -1){
		return true;
	}else{
		return false;
	}
}

// 入栈
bool push_stack(SeqStack *s, int val){
	if(s == NULL || s->top == MAXSIZE-1){
		return false;
	}else{
		s->top++;
		s->data[s->top] = val;
		return true;
	}
}

// 出栈
bool pop_stack(SeqStack *s, int *val){
	if(s == NULL || s->top == -1){
		return false;
	}else{
		*val = s->data[s->top];
		s->top--;
		return true;
	}
}

// 读取栈顶
int top_stack(SeqStack *s){
	if(s == NULL || s->top == -1){  // 如果栈不存在
		return 0;
	}else{
		return s->data[s->top];
	}
}


/* 顺序栈的简单应用 */
/**
  * 栈的简单应用:将一个十进制数转换为任意进制的数字
  * 简单分析:
  * @param val		十进制数
  * @return Hex		目标进制的数字
**/

/* - - - - 利用顺序栈实现 - - - - */
#include <stdio.h>
#include "SeqStack.h"
void convert(int dec, int base){
	SeqStack *s = init_Stack();
	printf("dec(%d) >> base.%d(", dec, base);
	while (dec != 0){
		push_stack(s, dec % base);
		dec /= base;
	}
	while ( !empty_stack(s) ){
		int val;
		pop_stack(s, &val);
		printf("%d", val);
	}
	printf(")\n");
}

int main(void){
	convert(100, 2);	// 转换为2进制数
	convert(100, 8);	// 转换为8进制数
	convert(100, 16);	// 转换为16进制数
	convert(100, 32);	// 转换为32进制数
	return 0;
}
相关文章
相关标签/搜索