数据结构—数组实现两个栈,不上溢
来源:互联网 发布:唐氏筛查自动计算软件 编辑:程序博客网 时间:2024/06/12 22:47
问题描述:说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。(算法导论第三版P131)
思路:stack1,stack2的base分别在数组的两端。stack1每次push的时候top + 1,stack2每次push时top-1,初始时top1=base1,top2=base2,判断是否用空余空间可以用stack1.top > stack2.top。pop操作相反,判断栈空可以用stack.base == stack.top。
<span style="font-size:18px;">#include <iostream>#include <string>using namespace std;int Array[10]={0}; //假设0表示当前位置中没有数据int top_s1=0,top_s2=9;//入栈,top_s1,top_s2表示当前要插入的位置bool Push(string s,int num){if(top_s1>top_s2){cout<<"栈满!";exit(0);}if (s=="first")Array[top_s1++]=num;elseArray[top_s2--]=num;return true;}int Pop(string s){if ((s=="first" && top_s1==0) || (s=="last" && top_s2==9)){cout<<"栈空!";exit(0);}if(s=="first"){int tmp=Array[--top_s1];Array[top_s1]=0;return tmp;}else{int tmp=Array[++top_s2];Array[top_s2]=0;return tmp;}}void main(){cout<<"初始为空(0表示当前位置中没有数据):";for(int i=0;i<10;i++)cout<<Array[i]<<",";cout<<endl;Push("first",20);Push("first",21);Push("first",22);Push("first",23);Push("last",29);Push("last",28);Push("last",27);Push("last",26);cout<<"入栈后:";for(int i=0;i<10;i++)cout<<Array[i]<<",";cout<<endl;Pop("first");Pop("first");Pop("last");cout<<"出栈后:";for(int i=0;i<10;i++)cout<<Array[i]<<",";cout<<endl;}</span>
结果:
0 0
- 数据结构—数组实现两个栈,不上溢
- 10.1-2 在一个数组A[1..n]中实现两个栈,使得两个栈元素个数之和不为n时,两者不会上溢
- 【数据结构】一个数组实现两个栈
- 【数据结构】 一个数组实现两个栈【面试】
- 数据结构--一个数组实现两个栈
- 【数据结构】一个数组实现两个栈
- 【数据结构】栈面试题--一个数组实现两个栈
- 数据结构-----栈数组实现
- 数据结构---栈(数组实现)
- 利用数组实现数据结构——栈
- 数据结构与算法(三)两个数组实现MIN栈问题
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- MyAlertViewActionSheet
- Gson解析Json实例
- IIS的各种身份验证详细测试
- Java回忆录(一)-------邂逅
- android客户端和java服务端之间用socket来传输图片(示例代码)
- 数据结构—数组实现两个栈,不上溢
- CDN架构实践:LVS 和keepalived 配置实例
- android ViewPager动画的实现原理及效果
- 深入了解Java运行时的内存区域
- android network 整理计划
- 通过Xcode导出ipa包
- Invalidate()
- sleep(0)
- 1033. 旧键盘打字(20)