剑指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<Integer>();
 5
 6     public void push(int node) {
 7        stack1.push(node);
 8     }
 9
10     public int pop() {
11         while(stack2.isEmpty()){
12             while(!stack1.isEmpty()){
13                 stack2.push(stack1.pop());
14             }
15         }
16         int ans = stack2.pop();
17     return ans;
18
19     }
20     public static void main(String[] args) {
21         // TODO Auto-generated method stub
22
23     }
24
25 }

原文地址:https://www.cnblogs.com/zlz099/p/8534675.html

时间: 2024-10-13 21:47:55

剑指offer5:用两个栈实现队列的相关文章

剑指Offer-5.用两个栈实现队列(C++/Java)

题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈(入队)的操作,所以我们可以使用一个栈来模拟入队的操作,另一个栈用来负责出队. 利用stack1模拟入队操作,stack2模拟出队操作. 当有元素入队时,就直接压入stack1中,当要出出队时,stack1中元素弹出的顺序和要求出队的顺序是正好相反的,我们可以将stack1的元素依次弹出,再压入st

剑指offer (7) 两个栈实现队列 两个队列实现栈

题目:用两个栈实现一个队列. 队列的声明如下,请实现它的两个函数 appendTail 和  deleteHead,分别完成队列尾部插入结点 和 队列头部删除结点 AppendTail:直接将元素入栈stack1 DeleteHead:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出 如果stack2为空,我们把stack1中的元素逐个弹出并入栈stack2,由于先进入队列的元素被压到stack1的底端,经过弹栈和压入stack2之后就处于stack2的顶端 1

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

题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 定义两个栈stack1,stack2,stack1负责存数据,stack2负责辅助完成队列的弹出.stack1维持一个队列的顺序,stack1栈底数据是最先压入的,弹出的时候,应该是最先被弹出的.我们弹出的时候,把stack1栈顶数据依次压入stack2,这样的话,最先在stack1栈底的数据会到stack2的栈顶,用stack2的pop方法自然就弹出该数据.只是要注意,弹出之后,为了防止新进入

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

剑指 | 7-利用两个栈构建一个队列

题目描述:http://ac.jobdu.com/problem.php?pid=1512 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解析: 定义2个栈s1, s2 1. 开始时,将元素push进s1 2. front()或pop()时,将s1的数据,出栈,顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序. 3. 再次push时,仍然 push 进 s1 4. front()或pop()时,如果 s2 为空,则将 s1 的所有数据压入 s2

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

LeetCode | 面试题09. 用两个栈实现队列【剑指Offer】【Python】

LeetCode 面试题09. 用两个栈实现队列[剑指Offer][Easy][Python][栈][队列] 问题 力扣 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","

用两个栈实现队列-剑指Offer

用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个栈的顺序是“后进先出”,再用一个栈把顺序颠倒过来就满足队列的“先进先出”规则了 用两个stack实现,stack1负责进队列,然后从stack2弹栈出队列,若stack2为空,再从stack1弹出到stack2 代码 import java.util.Stack; public class Solution { Stack<Integer> stack1 = new St