7-22 堆栈模拟队列 (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行。
输入样例:
3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T
输出样例:
ERROR:Full
1
ERROR:Full
2
3
4
7
8
ERROR:Empty
#include<bits/stdc++.h>
using namespace std;
stack<int>s1;
stack<int>s2; int main()
{ int m,n,i,a; char c; cin>>m>>n; if(m>n)swap(m,n); while(1){ cin>>c; if(c=='T') return 0;if(c=='A'){ cin>>a; if((s1.size()==m)&&(s2.size()!=0))cout<<"ERROR:Full"<<endl; else{ int len1,t; if(s1.size()==m){ len1=s1.size(); while(len1--){ t=s1.top(); s1.pop(); s2.push(t); } s1.push(a); } else if(s1.size()!=m)s1.push(a); } } else if(c=='D'){ if((s1.size()==0)&&(s2.size()==0)) cout<<"ERROR:Empty"<<endl; else{ int len2; if(s2.size()==0){ len2=s1.size(); while(len2--){ int t=s1.top(); s1.pop(); s2.push(t); } cout<<s2.top()<<endl; s2.pop(); } else if(s2.size()!=0){ cout<<s2.top()<<endl; s2.pop(); } } } } return 0;
}
模拟队列和真实队列还是有本质的区别的
#include<bits/stdc++.h>
using namespace std;
queue<int> q; int main()
{ int m,n,i,a; char c; cin>>m>>n; n+=m; for(i=0;;i++){ cin>>c; if(c=='T') return 0;if(c=='A'){ cin>>a; if(q.size()==n){cout<<"ERROR:Full"<<endl; } else{ q.push(a); } } else if(c=='D'){ if(q.size()==0){ cout<<"ERROR:Empty"<<endl; } else{ cout<<q.front()<<endl; q.pop(); } } } return 0;
}
7-22 堆栈模拟队列 (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或 ...
- 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. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...
最新文章
- GTK在Windows下开发和运行的一些设置问题
- Python3 图片(jpg、bmp、png)转PDF
- SAP OData Service group - get entity set
- rx.observable_使用Java 8 CompletableFuture和Rx-Java Observable
- 常用的前端跨域的几种方式
- Objective-C 2.0 with Cocoa Foundation 1 前言
- python系统提供构造函数传入参数_python类变量与构造函数的使用
- c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...
- 获得国内中国电信,网通,铁通的最新ip段的方法
- 开发过程中常用的 dos 命令
- 【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】
- Torch7 out of memory 解决方法
- SpringBoot整合Mybatis与JDBC连接池
- java坦克大战爆炸效果_Java坦克大战 (五) 之产生敌方坦克和爆炸效果
- Stata数据处理:快速读取万德-Wind-数据-readWind2
- java 某字段重复的数据库,excel表格两个字段去重复的数据库【用JAVA程序向SQL数据库导入Excel表,判断出SQL表中已存在的重复数据,并跳过重复的继续导入其他记录.】...
- 【Chrome 浏览器自带谷歌翻译用不了】
- SVN 如何解决冲突?
- linux 查看文件创建时间
- 6、数据库表的关系、Java对象的关系、关联查询(一对多)、延迟加载访问
热门文章
- face.evoLVe.PyTorch
- A-Light-and-Fast-Face-Detector-for-Edge-Devices
- C++操作Redis的简单例子
- Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py
- 介绍Python中的__future__模块
- iOS 代理反向传值
- unity android eclipse,[转]Android笔记:Eclipse嵌入Unity3D开发的3D场景
- math.hypot java_Java math
- java条件语句_Java条件语句
- 超级计算机排名表格,全球超级计算机500强_科技时代首页_新浪网