两个栈共享一个存储空间。两个栈的指针分别为top1和top2。
1.初始化共享栈
2.判断共享栈是否为空
3.栈1和栈2:进栈、出栈
4.获得栈1和栈2的栈顶元素
#include <iostream> #include <stdlib.h> #define MaxSize 10 using namespace std; typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int top1; int top2; }ShStack; void InitStack(ShStack &S);//初始化共享栈 bool StackEmpty(ShStack &S);//判栈空 bool Push1(ShStack &S,ElemType x);//栈1:进栈 bool Push2(ShStack &S,ElemType x);//栈2:进栈 bool Pop1(ShStack &S,ElemType &x);//栈1:出栈 bool Pop2(ShStack &S,ElemType &x);//栈2:出栈 bool GetTop1(ShStack S,ElemType &x);//栈1:获得栈顶元素 bool GetTop2(ShStack S,ElemType &x);//栈2:获得栈顶元素 //初始化共享栈 void InitStack(ShStack &S){ S.top1=-1; S.top2=MaxSize; } //判栈空 bool StackEmpty(ShStack &S){ if(S.top1==-1&&S.top2==MaxSize){ return true; }else{ return false; } } //栈1:进栈 bool Push1(ShStack &S,ElemType x){ if(S.top1+1==S.top2)return false;//栈满 S.data[++S.top1]=x; return true; } //栈2:进栈 bool Push2(ShStack &S,ElemType x){ if(S.top2-1==S.top1)return false; S.data[--S.top2]=x; return true; } //栈1:出栈 bool Pop1(ShStack &S,ElemType &x){ if(S.top1==-1)return false; x=S.data[S.top1--]; return true; } //栈2:出栈 bool Pop2(ShStack &S,ElemType &x){ if(S.top2==MaxSize)return false; x=S.data[S.top2++]; return true; } //栈1:获得栈顶元素 bool GetTop1(ShStack S,ElemType &x){ if(S.top1==-1)return false; x=S.data[S.top1]; return true; } //栈2:获得栈顶元素 bool GetTop2(ShStack S,ElemType &x){ if(S.top2==MaxSize)return false; x=S.data[S.top2]; return true; } int main(){ ElemType x; ShStack S; InitStack(S); Push1(S,1); Push1(S,2); Push1(S,3); Push2(S,50); Push2(S,51); Push2(S,52); Push2(S,53); Push2(S,54); Push2(S,55); Push2(S,56); if(Push1(S,4)==true){ printf("元素添加成功!\n"); }else{ printf("元素添加失败!\n"); } if(Push2(S,57)==true){ printf("元素添加成功!\n"); }else{ printf("元素添加失败!\n"); } while(GetTop1(S,x)){ printf("%d ",x); Pop1(S,x); } printf("\n"); while(GetTop2(S,x)){ printf("%d ",x); Pop2(S,x); } printf("\n"); if(StackEmpty(S)){ printf("共享栈为空!\n"); }else{ printf("共享栈不为空!\n"); } return 0; }