数据结构—数组实现两个栈,不上溢
2015-05-18 10:45
225 查看
问题描述:说明如何用一个数组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。
结果:
思路: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; else Array[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>
结果:
相关文章推荐
- 【数据结构】 一个数组实现两个栈【面试】
- 数据结构实现将两个数组合并成一个数组
- 数据结构--一个数组实现两个栈
- 【数据结构】栈面试题--一个数组实现两个栈
- 【数据结构】一个数组实现两个栈
- 【数据结构】一个数组实现两个栈
- [置顶] 【数据结构】 一个数组实现两个栈【面试】
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 数据结构:请用一个数组实现两个堆栈,要求最大地利用数组空间,使 数组只要有空间入栈操作就可以成功
- 数据结构笔记--栈的总结及java数组实现简单栈结构
- JavaScript实现判断传入的两个数组是否相似
- 四种方法实现两个等大数组之间内容交换
- 简单数据结构之数组栈(C++实现)
- 数据结构之动态数组 (C++类模板实现)
- 【数据结构】栈-数组的实现
- 使用一个数组实现两个栈
- 数据结构(栈--两个队列实现)
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 通过两个汇编实例对高级语言数组实现原理的发现