顺序栈借助游标top,主要在于栈空与栈满的判定!如图可以看出,栈空的标志是:top=-1,栈满的标志是top=MAXSIZE-1,当然,具体如何约束也可以自己约定!
#define MAXSIZE 20typedef struct{ int data[MAXSIZE]; int top; /*栈顶*/}*SeqStack,Stack;
初始化栈,将top置为-1;
void InitStack(SeqStack &S)/*初始化*/{ S->top=-1;}
入栈和出栈
入栈先将top++,然后插入数据,出栈,先取数据,再将top--;这个是比较容易理解的:
完整代码
#includeusing namespace std;#define MAXSIZE 20#define OK 1#define ERROR 0typedef struct{ int data[MAXSIZE]; int top;}*SeqStack,Stack;void InitStack(SeqStack &S)/*初始化*/{ S->top=-1;} int PushStack(SeqStack &S,int e)/*入栈*/{ if(S->top>=MAXSIZE-1) { cout<<"栈已满!"< data[++S->top]=e; return OK; }}int PopStack(SeqStack &S,int &e)/*出栈*/{ if(S->top==-1) { cout<<"栈已空!"< data[S->top--];return OK; }}int main(void){ int e; SeqStack S=(SeqStack)malloc(sizeof(Stack));/*堆中分配*/ InitStack(S);/*初始化*/ PushStack(S,12);/*入栈*/ PopStack(S,e);/*出栈*/ cout<<"S.top="< top<