首页 > 其他分享 >堆栈模拟队列

堆栈模拟队列

时间:2023-10-25 20:37:01浏览次数:29  
标签:队列 S2 s1 item 堆栈 S1 模拟

堆栈模拟队列

题目大意

PTA上的一道题,详题见文末。

设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。

输入

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

思路

最开始设想的是将长度小的栈作为存储栈,长度大的栈作为过渡输出栈,虽然可以实现队列,但是这种操作的时间复杂度和空间浪费都比较大,而且不合题意。

这道题目其实已经将思路藏在输出样例中了,要按照输入与输出对的样例来纠正,当输入A 5时,队列才满,所以其实可以理解为将S2作为了队头,而S1作为输入的队尾。当S2空时,根据是否刚好需要输出 或者 刚好S1长度符合S2时,将S1移入S2,完成队头的生成。

这样的队列长度最长可到2*N2,空间利用率会更高,速度也会较快。

image-20231025201841190

代码实现

#include<bits/stdc++.h>
using namespace std;
stack <int> s1,s2;
int N1,N2;
void move(void){
    while(!s1.empty()){int tem;tem=s1.top();s1.pop();s2.push(tem);}
}
void AddQ(int item){
    if(!s2.empty() && s1.size()==N2)cout<<"ERROR:Full"<<endl;
    else if(s2.empty() && s1.size()==N2){move();s1.push(item);}
    else s1.push(item);
}
int DeleteQ(){
    if(s1.empty()&&s2.empty())cout<<"ERROR:Empty"<<endl;
    else if(!s2.empty()){cout<<s2.top()<<endl;s2.pop();}
    else{move();cout<<s2.top()<<endl;s2.pop();}
}
int main(){
    cin>>N1>>N2;
    int item;
    char c;
    cin>>c;
    while(c!='T'){
            if(c=='A'){
                cin>>item;
                AddQ(item);
            }
            else DeleteQ();
            cin>>c;
    }
    return 0;
}

题目

image-20231025200051948

标签:队列,S2,s1,item,堆栈,S1,模拟
From: https://www.cnblogs.com/bolerat/p/17788039.html

相关文章

  • 74th 2023/10/5 模拟赛总结56
    T1看完题目,看到n<=9的限制,心头一紧一个词汇浮现于心:BruceForces暴力+记忆化,\(O(能过)\)但赛时并没有这样打,而是选择了往DP方面思考因为真的没想到能过然后DP呢,又不清楚该如何存一列的状态就匆匆暴力后离去考虑状压DP保留有用状态关键点:\(k=\min(k,n-k)\)可以参考\(C^k......
  • 考场(NOIP2023模拟2联测23)
    T1一眼顶针鉴定不出来,二眼顶针看出来是贪心,对于一个序列来说肯定要选值小的数来拉低平均数,鉴定完毕T2有点东西,也许是要用\(kruskal\)或\(prim\)的思想做题???边从前向后遍历,若一个边不是树边,因为要保证树边权最小,所以每次要更新树边的边权,然后再更新非树边边权,更新树边边权时......
  • 灵活、可用、高扩展,EasyMR 带来全新 Yarn 的队列管理功能及可视化配置
    YARN(YetAnotherResourceNegotiator)是Hadoop生态系统中的资源调度器,主要用于资源管理和作业调度。YARN自身具备队列管理功能,通过对YARN资源队列进行配置和管理,实现集群资源的分配,以满足不同应用和用户的需求。YARN的引入为集群在利用率、资源统一管理和数据共享等方面带来......
  • 【快应用】快应用中开屏广告模拟
    ​ 【关键词】开屏、原生广告、stack 【问题背景】快应用中目前暂时不支持开屏广告,开发者如想在应用启动时展示广告,可以在快应用中用原生广告来模拟替代,从而来实现开屏广告的效果。 【问题分析】实现上是比较简单的,首先需要将首页替换成一个只有原生广告展示的ux页面,然......
  • Java双端队列Deque简述
    概述​ Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。​ Deque是一个线性collection,支持在两端插入和移除元素。名称deque是“doubleendedqueue(双端队列)”的缩写,通常读为“deck”。大多数......
  • Java队列Queue简述
    概述​ Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。Queue的6个方法分类抛出异常返回特殊值插入add(e)offer(e)删除remove()poll()检查element(......
  • [转]Oracle数据文件损坏的模拟和修复(一) |ORA-01578 data block corrupted|
    造成数据块损坏的原因通常是由于开启了异步I/O或者增加了写进程,还有可能是硬件引起的,今天模拟一下该问题的发生及修复方法。由于水平有限,那面疏漏,欢迎大家指正。 创建测试环境建立测试表空间:123456create tablespacetestdatafile  '/u02/oradata/logdw......
  • 模拟 机器人的充电桩底板电压过大过小的 电压输出 测试操作方法
    1个dcpowersubbly直流稳压电源、铜丝电线若干根接线如下:1、把直流稳压电源的正极、负极分别连接电路板的正极、负极2、按下直流稳压电源开关ON/OFF3、按下旋转VOLTAGE,电压V数值会闪,向左调小,向右调大,停留1~2秒后则会按当前电源输出电压。超出电压范围值,前9秒红灯闪烁......
  • DC电源模块的模拟电源有什么优势?
    BOSHIDADC电源模块的模拟电源有什么优势?DC电源模块是电子系统中必不可少的部件之一。它们提供了可靠的直流电源,以驱动多种类型的电子设备。随着技术的进步,市场上出现了各种不同类型的DC电源模块,包括模拟电源和数字电源等。模拟电源是一种传统的DC电源模块,其基本原理是将输入的交流......
  • DC电源模块的模拟电源有什么优势?
    BOSHIDADC电源模块的模拟电源有什么优势?DC电源模块是电子系统中必不可少的部件之一。它们提供了可靠的直流电源,以驱动多种类型的电子设备。随着技术的进步,市场上出现了各种不同类型的DC电源模块,包括模拟电源和数字电源等。模拟电源是一种传统的DC电源模块,其基本原理是将输入的......