//-----------顺序堆栈实现------------------- // // stack表示顺序堆栈存放数据的数组,MaxStackSize表示最大存储元素个数 // DataType 为数据对象类型 // //------------2010年9月27日 16:16:06-------- By AndGod #include "stdio.h" #define MaxStackSize 100 //定义顺序堆栈的最大容量 typedef int DataType; //定义DataType的类型为 int typedef struct { DataType stack[MaxStackSize]; int top; }SeqStack; void StackInitiate(SeqStack *S) //初始化顺序堆栈 { S->top=0; //初始化栈顶下标值 } int StackIsEmpty(SeqStack *S) //判断顺序栈是否为空 空返回 false 非空则返回true { if(S->top <= 0) { return true; } else { return false; } } int StackPush(SeqStack *S,DataType x) { //把数据元素X存入顺序堆栈 成功返回 1,失败返回0 if(S->top >= MaxStackSize) { printf("堆栈已经无法插入!/n"); return 0; } else { S->stack[S->top]=x; S->top++; return 1; } } int StackPop(SeqStack *S,DataType *x) { //弹栈 成功返回1 失败返回0 弹出元素由 x带回 if(StackIsEmpty(S)) { printf("堆栈为空!/n"); return 0; } S->top--; *x=S->stack[S->top]; return 1; } int StackTop(SeqStack *S,DataType *x) { //取出栈顶元素 由x带回 ,成功返回1 失败返回0 if(StackIsEmpty(S)) { printf("堆栈为空!/n"); } else { *x=S->top; return 1; } } //------------测试函数------- void main() { SeqStack myStack; DataType x; StackInitiate(&myStack); //顺序堆栈初始化 for(int i=0; i<30; i++) { if(StackPush(&myStack,i)) //入栈 { printf("%d进栈/n",i); } else break; } for( i=0; i<30; i++) { if(StackPop(&myStack,&x)) { printf("%d出栈/n",x); } else break; } }