SeqStack.h #include "stdio.h" #include "math.h" typedef struct { DataType stack [MaxStackSize]; int top; } SeqStack; void StackInitiate(SeqStack *S) { S->top = 0; } int StackNotEmpty(SeqStack *S) { if (S->top <= 0) { return 0; } else { return 1; } } int StackPush(SeqStack * S,DataType x) { if (S->top >= MaxStackSize) { printf("堆栈已满无法插入!/n"); return 0; } else { //这时候S->top刚好为空待插入,因为数组从0开始 S->stack [S->top] = x; S->top++; return 1; } } int StackPop(SeqStack * S, DataType *d) { if ( S->top <= 0) { printf("堆栈已经空无需出栈!/n"); return 0; } else { //记住顺序,因为数组是从0开始的 S->top--; *d = S->stack [S->top]; return 1; } } int StackTop(SeqStack * S, DataType *d) { if ( S->top <= 0) { printf("堆栈已经空,没有数可以取出!/n"); return 0; } else { *d = S->stack [S->top-1]; return 1; } } SeqStackApp1.cpp #include "stdio.h" #define MaxStackSize 100 typedef int DataType; //记住不要写成了 #define #include "SeqStack.h" void main() { int i,x; SeqStack myStack; //顺序栈不要加地址& StackInitiate(&myStack); for (i = 0; i <10; i++) { if(StackPush(&myStack, i+1) == 0) { printf("插入错误!/n"); return ; } } //取栈顶数据 if (StackTop(&myStack, &x) == 0) { printf("取栈顶数据错误!/n"); return ; } else { printf("当前的栈顶元素为: %d/n", x); } printf("依次出栈的数据元素序列为:/n"); while(StackNotEmpty(&myStack)) { StackPop(&myStack, &x); printf("%d ", x); } }