设已知有两个堆栈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 分)相关推荐

  1. 7-4 堆栈模拟队列 (25 分)

    7-4 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判 ...

  2. 7-22 堆栈模拟队列 (25 分)(详解夹思路)

    一:题目 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判断堆栈S是否已满,返回1或 ...

  3. PTA: 7-2 银行业务队列简单模拟 (25 分)

    大一下半期数据结构 数据结构题目集 7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客 ...

  4. 5-2 Windows消息队列 (25分)

    5-2 Windows消息队列   (25分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中 ...

  5. 数据结构与算法--4.使用堆栈模拟队列

    问题: 队列的插入和删除遵循先入先出的原则,而堆栈遵循后进先出的原则. 用两个堆栈模拟队列,要求实现时不能分配超过O(1)的内存,时间复杂度必须是o(m). 思路: 用两个堆栈模拟队列,必须要支持两种 ...

  6. 7-1 银行业务队列简单模拟 (25 分)

    题目: 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出 ...

  7. 7-8 Windows消息队列 (25 分)

    消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的,这一进程循环地从队列中 ...

  8. 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)

    一:题目 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的,这一进程循环 ...

  9. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...

最新文章

  1. GTK在Windows下开发和运行的一些设置问题
  2. Python3 图片(jpg、bmp、png)转PDF
  3. SAP OData Service group - get entity set
  4. rx.observable_使用Java 8 CompletableFuture和Rx-Java Observable
  5. 常用的前端跨域的几种方式
  6. Objective-C 2.0 with Cocoa Foundation 1 前言
  7. python系统提供构造函数传入参数_python类变量与构造函数的使用
  8. c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...
  9. 获得国内中国电信,网通,铁通的最新ip段的方法
  10. 开发过程中常用的 dos 命令
  11. 【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】
  12. Torch7 out of memory 解决方法
  13. SpringBoot整合Mybatis与JDBC连接池
  14. java坦克大战爆炸效果_Java坦克大战 (五) 之产生敌方坦克和爆炸效果
  15. Stata数据处理:快速读取万德-Wind-数据-readWind2
  16. java 某字段重复的数据库,excel表格两个字段去重复的数据库【用JAVA程序向SQL数据库导入Excel表,判断出SQL表中已存在的重复数据,并跳过重复的继续导入其他记录.】...
  17. 【Chrome 浏览器自带谷歌翻译用不了】
  18. SVN 如何解决冲突?
  19. linux 查看文件创建时间
  20. 6、数据库表的关系、Java对象的关系、关联查询(一对多)、延迟加载访问

热门文章

  1. face.evoLVe.PyTorch
  2. A-Light-and-Fast-Face-Detector-for-Edge-Devices
  3. C++操作Redis的简单例子
  4. Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py
  5. 介绍Python中的__future__模块
  6. iOS 代理反向传值
  7. unity android eclipse,[转]Android笔记:Eclipse嵌入Unity3D开发的3D场景
  8. math.hypot java_Java math
  9. java条件语句_Java条件语句
  10. 超级计算机排名表格,全球超级计算机500强_科技时代首页_新浪网