剑指offer系列5---两个栈 模拟队列的操作

【题目】两个栈 模拟队列的入队出队操作

 1 package com.exe1.offer;
 2
 3 /**
 4  * [题目 ]:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
 5  * 队列的出队:应该是队列的列首先出,即栈底元素先出;思路:先把stack1元素一个个弹至上stack2中,再顺序出stack2中数即为队列的出队顺序。
 6  *      入队:先放到栈1中
 7  * @author WGS
 8  *
 9  */
10 import java.util.Stack;
11
12 public class CreateQueueWithTwoStacks {
13
14     //1 创建两个栈
15     Stack<Integer> stack1=new Stack<>();
16     Stack<Integer> stack2=new Stack<>();
17     //2 队列的入队操作
18     public void push(int num){
19         stack1.push(num);
20     }
21     //3 队列的出队操作
22     public int pop(){
23         if(stack2.size()<=0){
24             while(stack1.size()>0){
25                 stack2.push(stack1.pop());//先把stack1中元素弹至stack2中,当stack1没有元素的时候,就将stack2元素弹出
26             }
27         }
28         //异常处理
29         if(stack2.size()==0){
30             try{
31                 throw new Exception("empty queue");
32             }catch(Exception e){
33                 e.printStackTrace();
34             }
35         }
36         return stack2.pop();
37     }
38
39
40
41
42
43     public static void main(String[] args) {
44         CreateQueueWithTwoStacks cq=new CreateQueueWithTwoStacks();
45         cq.push(1);
46         cq.push(2);
47         cq.push(3);
48         //模拟123顺序进队,下面可看到依然是以先进先出顺序123出
49         System.out.println(cq.pop());
50         System.out.println(cq.pop());
51         System.out.println(cq.pop());
52
53         //再模拟入队操作,再插入一个数
54         cq.push(4);
55         System.out.println(cq.pop());
56         cq.push(5);
57         System.out.println(cq.pop());
58     }
59
60 }
时间: 2024-10-12 03:09:47

剑指offer系列5---两个栈 模拟队列的操作的相关文章

剑指offer系列-用两个栈实现队列

oj地址 题目1512:用两个栈实现队列 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2360 解决:804 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例. 对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数. 接下来的n行,每行输入一个队列操作: 1. PUSH X 向队列中push一个整数x(x>=0) 2. POP 从队列中pop一个数. 输出:

剑指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

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

题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc,其中c位于栈顶,而stack2仍然为空.我们试着删除一个元素.按照队列先进先出的原则,我们应该先删除元素a.元素a存放在stack1中且不在栈顶,因此不能直接删除.注意到stack2还未使用,我们把stack1中的元素逐个弹出并压入stack2中,stack2中的元素是cba,栈顶元素是a,我们现在可以

【Java】 剑指offer(8) 用两个栈实现队列

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集  题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路 这道题较简单,自己先试着模拟一下插入删除的过程(在草稿纸上动手画一下):插入肯定是往一个栈stack1中一直插入:删除时,直接出栈无法实现队列的先进先出规则,这时需要将元素从stack1出栈,压到另一个栈stack2

剑指OFFER之用两个栈实现队列

题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数.接下来的n行,每行输入一个队列操作:1. PUSH X 向队列中push一个整数x(x>=0)2. POP 从队列中pop一个数. 输出: 对应每个测试案例,打印所有pop操作中从队列pop中的数字.如果执行pop操作时,队列为空,则打印-1. 样例输入: 3 PUSH 1

【剑指Offer】用两个栈实现队列

问题描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 算法分析: push: 1.将数据压入stack1: pop: 1.将stack1中所有数据弹出到stack2: 2.将stack2中第一个数弹出设置为返回值: 3.将stack2中所有数据弹出到stack1: 4.将返回值返回 代码实现 class Solution { public: void push(int node) { stack1.push(node); } int pop() { w

剑指offer:用两个栈实现队列

题目:用两个栈实现一个队列.请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除结点的功能.队列的声明如下: template <typename T> class CQueue { public: CQueue(void); ~CQueue(void); // 在队列末尾添加一个结点 void appendTail(const T& node); // 删除队列的头结点 T deleteHead(); private: stack&

剑指offer T5 用两个栈实现队列

调用push时往stack1中添加元素,调用pop时,将stack1中的元素全部弹出压入stack2,然后再从stack2栈顶取元素 原文地址:https://www.cnblogs.com/jiguang321/p/11578385.html

剑指offer:用两个栈实现一个队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 类似汉诺塔,当我们需要将栈A下面的元素出栈的时候可以先将栈A中的元素全部逆序压入到另一个栈B,这时栈B保存的就是栈A的逆序,也就是满足了FIFO的要求 class Solution: """ 用两个栈模拟一个队列,如果两个栈的容量分别为M和N,其中M > N,那么模拟得到的队列的容量是2N+1 因为假设先把stack2塞满N个,然后此时stack1塞进N+2个,那么此时将元素出

剑指offer5:用两个栈实现队列

题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 基本操作,栈是后进先出,队列是先进先出,两个栈正好反反得正 1 import java.util.Stack; 2 public class Lianggezhanduilie { 3 Stack<Integer> stack1 = new Stack<Integer>(); 4 Stack<Integer> stack2 = new Stack<Intege