栈[顺序栈]

顺序栈借助游标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; }
原文地址:https://www.cnblogs.com/tinaluo/p/5237108.html