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