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

题目:

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

解决办法:

  队列先进先出,栈先进后出(stack1和stack2)

  其实主要要注意的点是:

    ①在添加时直接往第一个添加即可

    ②在删除时分情况,

    第一:如果stack2不为空,则直接弹出stack2中的元素即可,因为stack2中的肯定要比stack1中的元素加进来早

    第二:如果stack2是空的,则把stack1中的元素一一弹出并加入到stack2中,之后再弹出

如图测试数据:(结合下面代码看)

 1 import java.util.Stack;
 2
 3 public class Solution {
 4     Stack<Integer> stack1 = new Stack<Integer>();
 5     Stack<Integer> stack2 = new Stack<Integer>();
 6
 7     public void push(int node) {
 8         stack1.push(node);
 9     }
10
11     public int pop() {
12         if(stack2.isEmpty()){
13             while(!stack1.isEmpty()){
14                 stack2.push(stack1.pop());
15             }
16             return stack2.pop();
17         }else{
18             return stack2.pop();
19         }
20     }
21
22     public static void main(String[] args) {
23         Solution s = new Solution();
24         //①
25         s.push(1);
26         //②
27         s.push(2);
28         //③
29         s.push(3);
30         //④
31         int a = s.pop();
32         System.out.println(a);
33         //⑤
34         int b = s.pop();
35         System.out.println(b);
36         //⑥
37         s.push(4);
38         //⑦
39         int c = s.pop();
40         System.out.println(c);
41         //⑧
42         s.push(5);
43         //⑨
44         int d = s.pop();
45         System.out.println(d);
46         //⑩
47         int e = s.pop();
48         System.out.println(e);
49     }
50 }

原文地址:https://www.cnblogs.com/rgever/p/9693761.html

时间: 2024-11-08 06:53:23

剑指offer(五):用两个栈实现一个队列的相关文章

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

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

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

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

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

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

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

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

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

剑指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系列-用两个栈实现队列

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 T5 用两个栈实现队列

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

剑指offer(五十七)之二叉树的下一个结点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 代码: <span style="color:#000099;">/* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(i