算法导论 10.1-2 用一个数组实现两个栈
2012-09-18 18:29
344 查看
一、题目
说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总和不到n时,两个都不会发生上溯。注意PUSH和POP操作的时间应为O(1)二、思考
分别用数组的两端作为两个栈的起点,向中间扩展,两个栈中的元素总和不超过n时,两个栈不会相遇三、代码
//用一个数组实现两个栈 struct stack2 { //栈1和栈2的栈顶指针 int top1, top2;//分别初始化为0和n+1 int len;//数组长度 int *s;//数组 stack2(int size):top1(0),top2(size+1),len(size){s = new int[size+1];} }; //分别输出两个栈,从栈底到栈顶 void Print(stack2 S) { int i; cout<<"stack1:"; for(i = 1; i <= S.top1; i++) cout<<S.s[i]<<' '; cout<<endl; cout<<"stack2:"; for(i = S.len; i >= S.top2; i--) cout<<S.s[i]<<' '; cout<<endl; } //判断栈是否为空,flag为0表示对第1个栈进行操作,flag为1表示对第2个栈进行操作 bool Stack2_Empty(stack2 &S, bool flag) { if(flag == 0 && S.top1 < 1) return 1; if(flag == 1 && S.top2 > S.len) return 1; return 0; } //入栈,flag为0表示对第1个栈进行操作,flag为1表示对第2个栈进行操作 void Push(stack2& S, int value, bool flag) { //已满 if(S.top1 > S.top2) { cout<<"error:overflow"<<endl; return; } //对栈1操作 if(flag == 0) { //top S.top1++; S.s[S.top1] = value; } //对栈2操作 else { S.top2--; S.s[S.top2] = value; } } //出栈,flag为0表示对第1个栈进行操作,flag为1表示对第2个栈进行操作 int Pop(stack2 &S, bool flag) { int ret; //对栈1操作 if(flag == 0) { //栈1为空 if(S.top1 < 0) { cout<<"error:underflow"<<endl; return -1; } else { ret = S.s[S.top1]; S.top1--; } } //对栈2操作 else { //栈2为空 if(S.top2 > S.len) { cout<<"error:underflow"<<endl; return -1; } else { ret = S.s[S.top2]; S.top2++; } } return ret; }
相关文章推荐
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 算法导论10.1-7习题解答(用两个队列实现一个栈)
- 两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】
- 10.1-2 在一个数组A[1..n]中实现两个栈,使得两个栈元素个数之和不为n时,两者不会上溢
- 【算法导论】10.1-5单数组实现双端队列
- 算法导论10.1-2习题解答(用一个数组实现两个栈)
- 算法导论学习10.1 两个栈共享一个数组 and 两个栈实现一个队列 and 两个队列实现一个栈
- 10.1-2 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 整型数组处理算法(十三)请实现一个函数:凑14。[风林火山]
- 整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 算法导论------------栈(stack)简单的数组实现
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- 【LeetCode-面试算法经典-Java实现】【004-Median of Two Sorted Arrays(两个排序数组的中位数)】
- 一个数组实现两个栈
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组
- 仅用一个数组而实现两个栈的例程 除非数组的每一个单元都被使用 否则栈例程不能有溢出声明