题目描述:

用两个栈来实现一个队列,完成队列的Push和Pop操作。
队列中的元素为int类型。

输入:

每个输入文件包含一个测试样例。
对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数。
接下来的n行,每行输入一个队列操作:
1. PUSH X 向队列中push一个整数x(x>=0)
2. POP 从队列中pop一个数。

输出:

对应每个测试案例,打印所有pop操作中从队列pop中的数字。如果执行pop操作时,队列为空,则打印-1

样例输入:

3
PUSH 10
POP
POP

样例输出:

10
-1

解题思路:

首先题目要求,两个栈表示队列。那么最好就用两个栈喽,虽然不知道OJ是怎么检测的,但是应该用一个队列是不行的。那么我们想起了汉诺塔,栈本身是后进后出,队列是先进先出。这样如何来设计呢?使用两个栈,第一个栈用来PUSH,第二个栈用来POP。要注意的问题是,两个栈中间的到处元素的顺序不能乱。只要栈2中还有元素存在,栈1就不能往栈2中压元素。比如栈1新进元素3栈2中元素为 2 1,那么两个栈的列表为:
3
2 1 

此时如果要出栈的顺序必须是
1 2 3

如果此时把栈1压入栈2,出栈的顺序就成为
3 1 2

因此,切忌要保证栈2中的元素为空时,再向栈2内压入栈1的元素

代码:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#define MAX 100001
int stack1[MAX],stack2[MAX],top1,top2;
int main(void){int n,i,m;char input1[10];while(scanf("%d",&n)!=EOF && n<=100000 && n>= 1){top1 = top2 = 0;memset(&stack1,0,sizeof(int)*MAX);memset(&stack2,0,sizeof(int)*MAX);for(i=0;i<n;i++){scanf("%s",input1);if(strcmp(input1,"PUSH") == 0){scanf("%d",&m);stack1[top1++] = m;}else{if(top2 == 0){//判断栈2是否还存在元素while(top1){stack2[top2++] = stack1[--top1];}}if(top2)//如果栈2中有元素,则弹出,否则,表示两个栈都没有元素printf("%d\n",stack2[--top2]);else{printf("-1\n");}}}}return 0;
}

剑指OFFER之用两个栈实现队列(九度OJ1512)相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  2. java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)

    DailyChallenge 剑指 Offer 09. 用两个栈实现队列 Easy20200630 Description 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTai ...

  3. 【LeetCode】剑指 Offer 09. 用两个栈实现队列

    [LeetCode]剑指 Offer 09. 用两个栈实现队列 文章目录 [LeetCode]剑指 Offer 09. 用两个栈实现队列 一.双栈 总结 一.双栈 维护两个栈,第一个栈支持插入操作,第 ...

  4. 【剑指offer】 用两个栈实现队列 java实现

    [剑指offer] 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈和队列的性质,栈是先进后出的,而队列是先进先出的.对于栈我 ...

  5. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

  6. [剑指Offer]9.用两个栈实现队列

    题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc,其中 ...

  7. Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  8. 【双100%提交】剑指 Offer 09. 用两个栈实现队列

    立志用最少的代码做最高效的表达 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队 ...

  9. 剑指 Offer 09. 用两个栈实现队列(相邻相同操作只需要移动一次)

    题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,delete ...

最新文章

  1. QT+OPENCV实现录屏功能
  2. python的相对路径导入问题
  3. Mybatis的全局配置文件中的标签
  4. manjaro Linux调节屏幕显示亮度
  5. 内网穿透 无需公网ip_无需端口映射、无需公网IP,60秒实现FTP服务远程访问
  6. 《中国人工智能学会通讯》——11.21 结束语
  7. Java 学习多态笔记
  8. EMNLP'21 | Dialogue System 对话系统
  9. Day01 - 打开Linux大门
  10. 【洛谷 SP8093】 JZPGYZ - Sevenk Love Oimaster(后缀自动机)
  11. 微软应用商店错误代码“0x80131500”怎么修复?
  12. viewstub学习笔记
  13. JAVA智能分析的简单聚众筹平台计算机毕业设计Mybatis+系统+数据库+调试部署
  14. 继CryptoPunks、LOOT之后,GameFi+社交将是NFT的下一个爆发点
  15. Python高速缓存和会话库——Beaker
  16. 3DMark2003 破 9000 !
  17. 多标签用户画像分析跑得快的关键在哪里?
  18. 小米手机夜间模式在哪设置?仅需2个步骤
  19. 2018年中国 Micro-LED 行业市场前景研究报告(简版)
  20. JS 调用打印机,打印HTML中的部分内容

热门文章

  1. 去除标签_生活小常识:3m胶怎么去除
  2. SBUS协议转换芯片,SBUS转UART,sbus转rs232,sbus解码IC,zr003
  3. linux 任务计划 cron
  4. 人生百态:三件事现出三类人
  5. IOS开发中遇到的问题
  6. Django如何让未登录的用户自动跳转至登录页
  7. 《Python Cookbook(第3版)中文版》——1.5 实现优先级队列
  8. 未来已来——工作空间 WorkSpace 和物联网 IoT (1)
  9. EL表达式、 jstl标签
  10. Robot Framework安装过程