问题:建立顺序栈还是比较简单的。主要是一开始在入栈操作中每次调用初始化栈函数,结构出错。
代码:
#include <iostream> #include <cstdlib> using namespace std; #define MAXSIZE 20 typedef struct SeqStack { int stack [MAXSIZE]; int top; }*stackNode; void initStack(stackNode &stack) { stack=(stackNode)malloc(sizeof(struct SeqStack)); if(!stack) { cout<<"allocate fail"<<endl; exit(EXIT_FAILURE); } else { stack->top=-1; } } void pushStack(stackNode stack,int elem) { if(stack->top==MAXSIZE) { cout<<"stack is full"<<endl; exit(0); } else { stack->stack[++(stack->top)]=elem; } } int popStack(stackNode stack) { int elem; if(stack->top==-1) { cout<<"栈已空"<<endl; return -1; } elem=stack->stack[stack->top]; --stack->top; return elem; } int topStack(stackNode stack) { int top; if(stack->top==-1) { cout<<"栈已空"<<endl; return -1; } top=stack->stack[stack->top]; return top; } void showStack(stackNode stack) { if(stack->top==-1) { cout<<"栈已空"<<endl; exit(-1); } while(stack->top!=-1) { cout<<stack->stack[stack->top]<<"--"; --stack->top; } cout<<endl; } int main() { stackNode stack=NULL; int top; int arr[]={1,3,5,6,7,2,9,8}; initStack(stack); cout<<"入栈:"<<endl; for(int i=0;i<8;i++) { pushStack(stack,arr[i]); } top=topStack(stack); cout<<"top="<<top<<endl; cout<<"出栈元素为"<<popStack(stack)<<endl; cout<<"出栈元素为"<<popStack(stack)<<endl; cout<<"入栈:"<<endl; pushStack(stack,16); pushStack(stack,19); top=topStack(stack); cout<<"top="<<top<<endl; cout<<"遍历栈中的元素:"; showStack(stack); return 0; }
运行截图: