问题:建立顺序栈还是比较简单的。主要是一开始在入栈操作中每次调用初始化栈函数,结构出错。
代码:
#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;
}
运行截图: