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

堆栈模拟队列 (25分)

时间:2023-05-30 16:32:53浏览次数:41  
标签:25 输出 队列 s2 s1 item ERROR 堆栈


堆栈模拟队列 (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

输入时
1. s1没满,s2为空,输入到s1中。
2. s1满了,s2为空,将s1中的数据倒入s2中,再输入到s1中。
3. s1满了,s2不为空,输出ERROR:Full。

输出时
1. s2不是空的,直接输出s2.top()。
2. s2是空的,s1不是空的,将s1中的元素倒入s2中,再输出s2.top()。
3. s2是空的,s1也是空的,输出ERROR:Empty。

//
// Created by TIGA_HUANG on 2020/9/29.
//

#include <iostream>
#include <stack>

using namespace std;

int main() {
    stack<int> s1;
    stack<int> s2;
    int v1, v2;
    cin >> v1 >> v2;
    if (v1 > v2) {
        swap(v1, v2);
    }
    int num;
    char order;
    while (true) {
        cin >> order;
        if (order == 'T')
            exit(0);
        else if (order == 'A') {
            cin >> num;
            if (s1.size() == v1) {
                if (s2.size() == 0) {
                    while (s1.size()) {
                        s2.push(s1.top());
                        s1.pop();
                    }
                    s1.push(num);
                } else {
                    cout << "ERROR:Full" << endl;
                    continue;
                }
            } else {
                s1.push(num);
            }
        } else if (order == 'D') {
            if (s2.size() == 0) {
                if (s1.size() == 0) {
                    cout << "ERROR:Empty" << endl;
                    continue;
                } else {
                    while (s1.size()) {
                        s2.push(s1.top());
                        s1.pop();
                    }
                }
            }
            cout << s2.top() << endl;
            s2.pop();
        }
    }
}


标签:25,输出,队列,s2,s1,item,ERROR,堆栈
From: https://blog.51cto.com/u_16144724/6380376

相关文章

  • docker rabbitMQ 安装延时队列插件
    1下载插件到容器内在这个网站上找到插件的下载链接容器内wget或使用dockercp复制到容器内dockercp/rabbitmq_delayed_message_exchange-3.8.0.ezrabbit:/plugins2启用插件#进入容器启用插件dockerexec-itrabbit/bin/bashrabbitmq-pluginsenablera......
  • 单调队列
    以求滑动窗口内最小值为例:有2314785一组数据,有一个范围为3的的滑动窗口,每次向右移动1距离,求每次滑动的最小值队列特性维护一个最大为3个数的队列,且该队列具有单调性(队列内的数据呈现单调递增或递减)元素进队只能从队尾进,队头,队尾都可出从尾进队:是必......
  • hmac(md5,sha256) 魔改算法逆向
    2bebb2b85345bac93a790d1a6986b3d5经验1貌似特征码,需要在从伪代码切换到汇编模式,再点击看具体值2找出特征码,然后google再带算法,再带csource如md50x242070DBcsource3md5和sha1在transfrom4个特征相同,sha1多两个重命名经验根据上下文关系,需要点进去发现特征量,验......
  • 实现延迟队列
    原理:利用消息过期后消息进入死信,然后消费者订阅死信队列进行消费达到延迟的功能 生产者-->交换机01-->过期队列-->消息过期后-->死信交换机-->死行队列-->消费者 定义配置@ConfigurationpublicclassTTLQueueConfig{//region声明普通类型的交换机和队列pu......
  • 关于vi编辑出现E325: ATTENTION的解决方案
    解决方案 1-vifilename进入编辑器,查看报错信息,出现E325:ATTENTION例如:E325:ATTENTIONFoundaswapfilebythename"rm/var/opt/gitlab/gitlab-rails/etc/.gitlab.yml.swp"2-复制Foundaswapfilebythename之后的信息,并退出......
  • 代码随想录算法训练营第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
     第六章二叉树part04 今日内容:  ●  110.平衡二叉树 ●  257. 二叉树的所有路径 ●  404.左叶子之和   详细布置  迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。  110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是......
  • 文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题
    七、设计算法,仅使用三次实数乘法即可完成复数a+bi和c+di相乘。算法需接收a、b、c和d为输入,分别生成实部ac-bd和虚部ad+bc。文心一言:可以使用如下算法来计算复数a+bi和c+di的积,且只需进行三次实数乘法:1.将a和b相乘,得到ab;2.将c和d相乘,得到cd;3.将ab+cd赋......
  • Java-Day-25( 字节输入流 + FileInputStream 和 FileOutputStream + FileReader 和 Fi
    Java-Day-25InputStream(字节输入流)InputStream抽象类是所有类字节输入流的超类InputStream常用的子类FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流ObjectInputStream:对象字节输入流FileInputStream和FileOutputStreamFileInputStream(文......
  • poj 2010(优先队列)
    题意:奶牛大学:奶大招生,从C头奶牛中招收N头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。解题思路:这里要求最大中位数,中位数肯定是在这些人中间,故可以枚举中位数,可以先对分数进行排序,然后用二分去找最大中位数。每次枚举的中位......
  • 数据结构之环形队列
    @TOC一.环形队列的定义及其特点循环队列是一种线性数据结构,其操作依然是先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。特点:对于一个普通队列来说,每出队一次,头指针就必须往后移一位,这样使用过的空间就无法再重复使用,(头指针无法回移),即使队列元素......