剑指OFFER之用两个栈实现队列(九度OJ1512)
时间:2022-04-22
本文章向大家介绍剑指OFFER之用两个栈实现队列(九度OJ1512),主要内容包括题目描述:、输入:、输出:、样例输入:、样例输出:、解题思路:、代码:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目描述:
用两个栈来实现一个队列,完成队列的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("%dn",stack2[--top2]);
else{
printf("-1n");
}
}
}
}
return 0;
}
- 如何通过追踪代码自动发现网站之间的“关联”
- 教你如何和使用这款强大的渗透平台-Xerosploit
- No.014 Longest Common Prefix
- Java实现解析IP地址的方法,给出一串数字,生成正确的IP地址
- 图解“管道过滤器模式”应用实例:SOD框架的命令执行管道
- No.013 Roman to Integer
- OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
- Java实现的手工做乘法方法,给出二个字符串数字,返回相乘结果
- No.012 Integer to Roman
- 黑帽SEO剖析之手法篇
- IOS学习1——IOS应用程序的生命周期及基本架构
- 浅议“全局变量”、“多线程”和“编译器陷阱”
- Java实现的图片合并方法,支持水平和垂直合并
- OC学习15——文件I/O体系
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
- PHP实现微信商户支付企业付款到零钱功能
- yii2 开发api接口时优雅的处理全局异常的方法
- PHP调用全国天气预报数据接口查询天气示例
- Python使用itcaht库实现微信自动收发消息功能
- Laravel源码解析之路由的使用和示例详解
- PHP实现的用户注册表单验证功能简单示例
- php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
- 微信企业转账之入口类分装php代码
- python输出结果刷新及进度条的实现操作
- PHP实现微信申请退款功能
- python 读取.nii格式图像实例
- PHP实现八皇后算法
- 浅析php如何实现爬取数据原理
- Python 存取npy格式数据实例