C/C++实现共享栈
2021/6/19 17:57:14
本文主要是介绍C/C++实现共享栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
何为共享栈
两个栈共享一个存储空间。两个栈的指针分别为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; }
这篇关于C/C++实现共享栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享