3-8 堆栈模拟队列 (25 分)
设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。
所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:
int IsFull(Stack S) :判断堆栈S是否已满,返回1或0;
int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;
void Push(Stack S, ElementType item ) :将元素item压入堆栈S;
ElementType Pop(Stack S ) :删除并返回S的栈顶元素。
实现队列的操作,即入队void AddQ(ElementType item)和出队ElementType DeleteQ()。
输入格式:
输入首先给出两个正整数N1和N2,表示堆栈S1和S2的最大容量。随后给出一系列的队列操作:A item表示将item入列(这里假设item为整型数字);D表示出队操作;T表示输入结束。
输出格式:
对输入中的每个D操作,输出相应出队的数字,或者错误信息ERROR:Empty。如果入队操作无法执行,也需要输出ERROR:Full。每个输出占1行。
题目思路:
1.不用真的去实现题目中说的那么多函数的功能,可以采用两个整形数组模拟一下即可。
2.想要达到队列先进先出的效果,那么一定是让数据在入栈以后,在另一个栈中“翻个身”,也就是说让小的栈作为输入栈,大的栈作为输出栈(因为小的栈够短,能够在大的栈中“翻身”)。
3.队空条件,两个栈(数组)都为空。
4.栈满条件,输入栈满了并且输出栈里还有元素。(自己在纸上画画,在这种条件下,如果进行“翻身”动作,那么原本在输出栈准备输出的元素就被压到下面了,不符合队列的规则)
#include<iostream>
using namespace std;
void swap(int& a, int& b){ int t = a; a = b; b = t;}int main()
{int m, n, x;int st1[100], st2[100], k1 = 0, k2 = 0;cin >> m >> n;if(m < n) swap(m, n); //把小栈大小定位n,方便统一处理char c;while (cin >> c && c != 'T'){if (c == 'A'){cin >> x;if (k2 == n && k1) //栈满cout << "ERROR:Full\n";else if (k2 < n)st2[k2++] = x;else if (k2 == n && !k1){while (k2)//翻身{st1[k1++] = st2[--k2];}st2[k2++] = x; //翻身以后再输入}elsecout << "ERROR:Full\n";}else if (c == 'D'){if (!k1 && !k2)//栈空cout << "ERROR:Empty\n";else if (k1)cout << st1[--k1] << endl;else if (!k1 && k2) {while (k2) //翻身{st1[k1++] = st2[--k2];}cout << st1[--k1] << endl;//翻身以后再输出}}}return 0;
}
3-8 堆栈模拟队列 (25 分)相关推荐
- 7-4 堆栈模拟队列 (25 分)
7-4 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判 ...
- 7-22 堆栈模拟队列 (25 分)
设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判断堆栈S是否已满,返回1或0: in ...
- 7-22 堆栈模拟队列 (25 分)(详解夹思路)
一:题目 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判断堆栈S是否已满,返回1或 ...
- PTA: 7-2 银行业务队列简单模拟 (25 分)
大一下半期数据结构 数据结构题目集 7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客 ...
- 5-2 Windows消息队列 (25分)
5-2 Windows消息队列 (25分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中 ...
- 数据结构与算法--4.使用堆栈模拟队列
问题: 队列的插入和删除遵循先入先出的原则,而堆栈遵循后进先出的原则. 用两个堆栈模拟队列,要求实现时不能分配超过O(1)的内存,时间复杂度必须是o(m). 思路: 用两个堆栈模拟队列,必须要支持两种 ...
- 7-1 银行业务队列简单模拟 (25 分)
题目: 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出 ...
- 7-8 Windows消息队列 (25 分)
消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的,这一进程循环地从队列中 ...
- 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
一:题目 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的,这一进程循环 ...
- 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...
最新文章
- 程序员在翻车时的30种常见反应
- 把jquery的this写入选择器里(伪写入)哈哈~
- 干掉状态:从session到token
- 数学知识在游戏中的运用
- SqlServer2008备份与还原(完整图示版)
- 面向对象9:方法的重写、super关键字、子类对象的实例化过程
- AD 09 PCB生成GERBER生产文件全过程
- magisk卸载内置软件_GJ2x_免root搞机工具箱V6.71 更新:增加卸载内置功能
- 网页保存视频最有效的几种方法
- 产出投入表结构类型的介绍
- 孙悟空的师傅的真实身份
- 头条视频不足一分钟有收益吗,头条30秒视频都有收益吗
- 操作系统(Linux)
- unity中Game视图中实现和Scene视图中一样的摄像机操作
- linux下 不显示光驱,Windows7电脑下不显示光驱盘符的解决方法
- 东田纳西州立大学计算机排名,美国东田纳西州立大学介绍
- 苹果手机充值显示服务器异常,球球大作战iOS会员充值异常解决办法
- word怎么设置边距为80磅_Word排版不能忽视的「标尺」工具,6 种用法 80% 的人不知道!...
- pgsql:字符串转数值
- Chrome驱动程序无法打开Chrome浏览器
热门文章
- 第三季-第20课-多线程程序设计
- Oculus:自己做内容不是长远之计,资助第三方开发者才是王道
- 【小贴士】工作中的”闭包“与事件委托的”阻止冒泡“
- 01我为什么学Unity3d
- python selenium --鼠标事件
- 18个有用的 .htaccess 文件使用技巧
- 【转】windows下mongodb安装与使用整理
- 无法注册这篇文档........
- DS4300电池即将过期,磁阵目前读写缓慢解决过程.txt
- 基本数据类型与引用数据类型