Virtual Judge-4099:队列和栈

2023-11-15

Virtual Judge-4099:队列和栈

题目描述:
队列和栈是两种重要的数据结构,它们具有push k和pop操作。push k是将数字k加入到队列或栈中,pop则是从队列和栈取一个数出来。队列和栈的区别在于取数的位置是不同的。

队列是先进先出的:把队列看成横向的一个通道,则push k是将k放到队列的最右边,而pop则是从队列的最左边取出一个数。

栈是后进先出的:把栈也看成横向的一个通道,则push k是将k放到栈的最右边,而pop也是从栈的最右边取出一个数。

假设队列和栈当前从左至右都含有1和2两个数,则执行push 5和pop操作示例图如下:

	 push 5          pop

队列 1 2 -------> 1 2 5 ------> 2 5

      push 5          pop

栈 1 2 -------> 1 2 5 ------> 1 2
现在,假设队列和栈都是空的。给定一系列push k和pop操作之后,输出队列和栈中存的数字。若队列或栈已经空了,仍然接收到pop操作,则输出error。

Input
第一行为m,表示有m组测试输入,m<100。
每组第一行为n,表示下列有n行push k或pop操作。(n<150)
接下来n行,每行是push k或者pop,其中k是一个整数。
(输入保证同时在队列或栈中的数不会超过100个)

Output
对每组测试数据输出两行,正常情况下,第一行是队列中从左到右存的数字,第二行是栈中从左到右存的数字。若操作过程中队列或栈已空仍然收到pop,则输出error。输出应该共2*m行。
Sample Input

2
4
push 1
push 3
pop
push 5
1
pop

Sample Output

3 5
1 5
error
error

思路:
对数列和栈基础知识的运用,知道两种数据结构的相同和不同。

AC代码:

#include<stdio.h>
#include<stack>
#include<queue>
#include<string.h>
using namespace std;
char ch[10];    //定义一个字符数组存push和pop
int q[1000];    //存栈内元素
int p[1000];    //存队列内元素
int main()
{
    int m,n;
    int x,flag;     //x为入栈数字,flag为标记,用来标记是否为空栈或空队列
    scanf("%d",&m);
    getchar();
    while(m--)
    {
        flag=0;         //标记初始化
        int c=0,d=0;    //c和d为计数器,分别为队列和栈的计数
        queue<int> a;   //定义一个队列
        stack<int> b;   //定义一个栈
        scanf("%d",&n);
        getchar();
        while(n--)
        {
            scanf("%s",ch);
            if(ch[1]=='u')      //看是push还是pop,如果第二个字符为‘u‘就入栈
            {
                scanf("%d",&x);
                a.push(x);      //入队列
                b.push(x);      //入栈
            }
            if(ch[1]=='o')
            {
                if(a.empty()||b.empty())    //判断是否为空栈(空队列)如果为空栈还pop就输出error
                {
                    flag=1;
                }
                else                        //否则就pop
                {
                    a.pop();
                    b.pop();
                }
            }
        }
        if(flag!=1)     //如果不是空栈或空队列
        {
            while(!a.empty())   //非空就那一个数组存起来
            {
                p[d]=a.front();
                a.pop();
                d++;
            }
            for(int i=0;i<d;i++)    //输出队列元素
            {
                if(i!=d-1)
                {
                    printf("%d ",p[i]);
                }
                else
                {
                    printf("%d\n",p[i]);
                }
            }
            while(!b.empty())   //非空就那一个数组存起来
            {
                q[c]=b.top();
                b.pop();
                c++;
            }
            for(int i=c-1;i>=0;i--)     //输出队列元素,因为栈是先进后出,所以倒序输出
            {
                if(i!=0)
                {
                    printf("%d ",q[i]);
                }
                else
                {
                    printf("%d\n",q[i]);
                }
            }
        }
        else
        {
            printf("error\n");
            printf("error\n");
        }
        while(!a.empty()||!b.empty())   //清空队列和栈内元素
        {
            a.pop();
            b.pop();
        }
    }
    return 0;
}

(这是一道基础题,但是我在输出元素的时候卡住了,还是对知识掌握的不够好,感谢我身边的大佬对我的帮助)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Virtual Judge-4099:队列和栈 的相关文章

随机推荐

  • 组件化开发——组件生命周期

    最近刚刚换了工作 原来一直用angular系列 本来一直看好react的 结果facebook自己非要作死 结果就让vue直飞冲天了 现在工作中也用到vue 熟悉之余顺便记下一笔 后续可能会有weex先关的 暂且记录一下 今天看了一下vue
  • C零基础课程-13-关系运算符与关系表达式

    文章目录 C语言中的关系运算符 与 gt 与 lt gt 与 lt 关系表达式的值 初学者常见bug 错写 为 视频地址 https www bilibili com video av73897727 C语言中的关系运算符 C语言中的关系运
  • 不要再用简单的加权平均了 用回归做融合吧

  • 「总结」最全2万字长文解读7大方向人脸数据集v2.0版

    人脸图像是计算机视觉领域中研究历史最久 也是应用最广泛的图像 从人脸检测 人脸识别 人脸的年龄表情等属性识别 到人脸的三维重建等 都有非常多的数据集被不断整理提出 极大地促进了该领域的发展 本次 我们从人脸检测 关键点检测 人脸识别 人脸属
  • 【多模态】22、UniDetector

    文章目录 一 背景 二 方法 2 1 UniDetector 框架结构 2 2 Heterogeneous Label Space Training 2 3 open world inference 三 效果 3 1 数据集 3 2 Obj
  • cmake:target属性POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDENT_CODE的区别

    cmake定义的target有两个名字类似的属性 POSITION INDEPENDENT CODE和INTERFACE POSITION INDEPENDENT CODE 本文说明它们的含义和区别 fPIC 介绍POSITION INDE
  • linux ALSA & ASOC (3) — widget 、route

    目录 DAPM的基本单元widget widget的种类 widget之间的连接器path widget的连接关系route 上一篇文章中 我们介绍了音频驱动中对基本控制单元的封装 kcontrol 利用kcontrol 我们可以完成对音频
  • 退出旋流虚空

    在构建一些软件之前 您经常面临着各种可能性的漩涡 这可能导致 期权瘫痪 想象一个巨大的系统 建立框架的错误愿望 付出了很多努力 但没有进展或结果 作为一个明智的领袖曾经对我说 出色的软件开发人员的特点是他们能够解决一个大问题并将其分解为较小
  • word文件丢失怎么办?恢复Word文档的3个方案

    电脑里面有很多大大小小的文件数据 有时对我们可有可无 有时是很重要的 在清理电脑过程中 要是不小心误删了重要的文件 word文件丢失如何恢复 只需要下面的3个方案 就可以轻松找回Word文档 方案一 回收站恢复Word文档 要说电脑最容易误
  • Nginx快速入门

    Nginx服务快速入门 文章目录 Nginx服务快速入门 一 Nginx介绍 1 什么是Nginx 2 为什么要使用Nginx 3 什么是正向代理 4 什么是反向代理 二 Nginx在Linux下的安装 1 下载 2 安装 三 Nginx配
  • 用批处理将文件夹设为虚拟磁盘

    记录备忘 将下列文本保存成 bat subst Z d subst Z D WorkSpace
  • python 爬虫 requests模块 中的Cookies 验证 通过验证cookies模拟登陆豆瓣登陆

    在爬取某些数据时 需要进行网页的登陆 才可以进行数据的抓取工作 Cookies登陆就像很多网页中的自动登陆功能一样 可以让用户第二次登陆时不在需要验证账号和密码的情况下进行登陆 在requests模块中实现Cookies登陆时 首先需要在浏
  • 华为OD机试真题 Java 实现【异常的打卡记录】【2023Q1 100分】

    一 题目描述 考勤记录是分析和考核职工工作时间利用情况的原始依据 也是计算职工工资的原始依据 为了正确地计算职工工资和监督工资基金使用情况 公司决定对员工的收集打卡记录进行异常排查 如果出现以下两种情况 则认为打卡异常 实际设备号与注册设备
  • selenium+pytest——失败用例重试

    selenium pytest 失败用例重试 一 目的 在我们使用selenium pytest做UI自动化的时候偶尔会遇到因为特殊情况 比如浏览器加载失败 网络波动等等导致用例运行失败 可能单独运行没 问题 对于这些场景产生的用例结果不是
  • UE4 蓝图通信:接口调用

    UE4学习心得 蓝图间信息通信的几种方法 UE4的接口调用技术有点简单粗暴 而且主要体现在主蓝图对子蓝图的信息通信 在内容浏览器中添加一个蓝图接口 命名为TestInterface 双击打开接口 直接使用其创建时自带的一个接口函数 将其重命
  • 物理机安装centos7(u盘安装)——详细版

    我用的是华为的物理机 其它物理机操作几乎相同 可能不同的设置调试方法不同 如果是虚拟机安装 直接跳到centos7设置即可 物理机U盘启动 安装centos8方法相同 可能有些需要硬件配置相关 相关问题看具体报错方式 UltraISO下载地
  • 在C语言中 ¬∧∨这些符号什么意思

    b b b a a a b a a 或运算是 a b a b b b a a a 这三个都是位运算 是取非运算 交你个小窍门 没啥子好多的了 好好看看 里面有详细的解释 这就是在逻辑运算中常用到的短路判断 ls的已经说的很清楚了 b a b
  • 微信小程序之首页搭建

    小程序开发与实战 学习视频 https www bilibili com video BV1Gv411g7j6 p 9 spm id from pageDriver 实现导航栏和tabBar 实现导航栏和tabBar tabBar看下图 参
  • 电荷泵

    电荷泵 又称为电容式的开关稳压器 或开关电容DC DC变换器 无感式DC DC变换器 电荷泵采用电容作为开关和储能的元件 如图所示 S1与S3闭合 S2与S4断开 则Vin给电容充电 而后S1与S3断开 S2与S4闭合 则电容放电 此时Vo
  • Virtual Judge-4099:队列和栈

    Virtual Judge 4099 队列和栈 题目描述 队列和栈是两种重要的数据结构 它们具有push k和pop操作 push k是将数字k加入到队列或栈中 pop则是从队列和栈取一个数出来 队列和栈的区别在于取数的位置是不同的 队列是