3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
主题链接:http://pat.zju.edu.cn/contests/ds/3-08
设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。
所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:
(1) int IsFull(Stack S):推断堆栈S是否已满,返回1或0;
(2) int IsEmpty (Stack S ):推断堆栈S是否为空,返回1或0。
(3) void Push(Stack S, ElementType item ):将元素item压入堆栈S;
(4) 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 2 A 1 A 2 D D T |
1 2 |
2 |
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 |
PS:
个人认为题意有点难理解!反正我是理解了好久!
代码例如以下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
stack<int>s1;//容量小的栈
stack<int>s2;//容量大的栈
int main()
{int n1, n2;char c;while(~scanf("%d%d",&n1,&n2)){if(n1 > n2){int t = n1;n1 = n2;n2 = n1;}getchar();int tt;int flag = 0;for(int i = 0; ; i++){scanf("%c",&c);if(c == 'T')//结束输入break;if(c == 'A'){scanf("%d",&tt);if(s1.size()==n1 && s2.size()!=0)//假设栈s1满且栈s2不为空,则队满{printf("ERROR:Full\n");continue;}if(s1.size()!=n1)//假设栈s1没有满,直接压入s1.push(tt);else{int len = s1.size();//假设栈s1满。把栈s1的全部元素弹出压入s2for(int i = 0; i < len; i++){int t = s1.top();s1.pop();s2.push(t);}s1.push(tt);//压入s1}}else if(c == 'D'){if(s1.size()==0 && s2.size()==0){printf("ERROR:Empty\n");continue;}if(s2.size() == 0)//若栈s2空就将s1中的全部元素弹出到栈s2中,然后出栈{int len = s1.size();for(int i = 0; i < len; i++){int t = s1.top();s1.pop();s2.push(t);}}printf("%d\n",s2.top());s2.pop();}}}return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
转载于:https://www.cnblogs.com/bhlsheji/p/4887299.html
3-08. 栈模拟队列(25)(ZJU_PAT 模拟)相关推荐
- 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或 ...
- 队列与环形队列使用数组模拟
队列 该文是观看尚硅谷韩老师视频学习自己总结学习得,有的是来源于网络收集 队列引入 进的一端称为队尾(rear),出的一端称为队头(front).队列可以用顺序存储,也可以用链式存储. 队列介绍 队列 ...
- JAVA数据结构与算法【队列、数组模拟(环形)队列】
队列 使用场景:排队 队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取出.后存入的要后取出 示意图:(使用数组模拟队列示意图) 数组模拟队列 ...
- 数据结构——栈与队列操作(用栈模拟队列)
[栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...
- 数组模拟栈和队列板子
使用数组模拟数据结构栈和队列 栈:后进先出 对于栈:我们使用tt表示栈顶的下标,如果tt==0表示栈空 队列:先进先出 对于队列,我们使用hh表示队首,tt表示队尾,tt初始化为-1,判断队列是否为空 ...
- 【干货】容器适配器实现两个栈模拟队列
用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...
- LinkedList 模拟栈和队列
LinkedList 比ArrayList 提供了更多的方法,其中有两个方法可以实现栈和队列的操作. removeFirst() 移除并返回此列表中的第一个元素. removeLast() 移除并返回 ...
最新文章
- 这位中国小伙 6个月用比特币攒了125个亿 !
- 打造数字化服务能力,中国联通如何借助云原生技术实现增长突围?
- boost::spirit模块利用 std::tuple 将多个属性包装成一个的测试程序
- 多模块Maven工程单独打包某一模块工程
- ssl1010-方格取数
- jquer WdatePicker 使用 手册
- Mac 的 Adobe Creative Cloud 无法连接至服务器的解决办法?
- python建模_python建模实例详解
- 阿酷三合一版_阿酷插件3.2开源版
- mdx词典包_译者的电子工具——手机词典上篇
- Arduino—— SSD1306 OLED IIC
- 背景图页面缩小会变形_HTML中怎么让背景图片跟着浏览器窗口变大变小?
- 【备战春招/秋招系列】美团Java面经总结终结篇 (附详解答案)
- 计算机怎么换桌面皮肤,如何更换电脑腾讯视频上的皮肤样式
- 关于NorFlash的一点总结
- 微软亚洲研究院面试题
- 计算机基础_001_栈是什么
- SpringBoot使用Netty实现远程调用
- 专科mysql数据库大作业_数据库大作业整理·总
- macos 上的各种下载软件安装方式
热门文章
- VMware vSphere Client 5.0在官网用讯雷下载出错
- thinkphp3.1的新功能
- MM的静态寻址和动态寻址
- SAP BAPI的一些初级资料
- DateChooser ASP.NET 2.0版 之实用版
- centos6 yum源不能使用
- chrome上很棒的爬虫插件,至少爬取博客够用了
- 如果要和外国人做项目,加入一个teams是第一步,就跟我们的企业微信,钉钉差不多
- IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
- 在linux中安装mysql时遇到的问题