#include <stdio.h> #define MaxSize 50 typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int top; }SqStack;
初始化时top指向-1 判空的条件是top=-1 void InitStack(SqStack &S){ S.top=-1; } bool StackEmpty(SqStack &S){ if(S.top==-1){ printf("empty"); return true; } return false; }
入栈时先判断满没有 先加一再入栈 bool Push(SqStack &S,ElemType num){ if(S.top==MaxSize-1){ return false; } S.data[++S.top]=num; return true; } bool GetTop(SqStack S,ElemType &m){ if(S.top==-1){return false;} m=S.data[S.top];//获取到当前top指向的元素 return true; } 出队时先取值再移动top bool Pop(SqStack &S,ElemType &m){ if(S.top==-1){return false;} m=S.data[S.top--]; return true; } int main() { SqStack S;//顺序栈 ElemType m; InitStack(S); StackEmpty(S); Push(S,3); Push(S,4);//入栈元素 4 Push(S,5); bool flag=GetTop(S,m); if(flag) { printf("top is %d\n",m); } flag=Pop(S,m);//弹出栈顶元素 if(flag) { printf("drop is %d\n",m); } return 0; }
//队列的本质是数组移动指针,看似不变最后其实会被覆盖