两个stack实现一个queue

package com.hzins.suanfa;

import java.util.Stack;
/**
 * 两个stack实现一个queue
 * @author Administrator
 *
 */
public class TwoStackToQueue {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;
    public TwoStackToQueue(){
        stack1 = new Stack<Integer>();
        stack2 = new Stack<Integer>();
    }
    /**
     * 入队
     * @param value
     */
    public void push(int value){
        stack1.push(value);
    }
    /**
     * 出队
     */
    public int pop(){
        while(!stack2.isEmpty()){
            return stack2.pop();
        }
        while(!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        return stack2.pop();
    }
    public static void main(String[] args) {
//         Stack<Integer> stack1 = new Stack<Integer>();
//         stack1.push(1);
//         stack1.push(2);
//         stack1.push(3);
//         stack1.push(4);
//         System.out.println(stack1.size());
//         System.out.println(stack1.pop());
//         System.out.println(stack1.pop());
//         System.out.println(stack1.pop());
//         System.out.println(stack1.pop());
        TwoStackToQueue queue = new TwoStackToQueue();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        queue.push(4);
        System.out.println(queue.pop());
    }
}
时间: 2024-10-11 07:31:32

两个stack实现一个queue的相关文章

用两个stack设计一个队列

思路:用两个栈,一个用于接收(in),一个用于输出(out),输出前如果out为空需要将in中的数据导入out. import java.util.Stack; //用两个stack设计一个队列 p142 public class MyQueue<T> { Stack<T> in; Stack<T> out; public MyQueue() { in = new Stack<T>(); out = new Stack<T>(); } publi

用两个stack实现一个队列

class Queue { stack<int> input, output; public: void push(int x) { input.push(x); } void pop(void) { peek(); output.pop(); } int peek(void) { if (output.empty()) while (input.size()) output.push(input.top()), input.pop(); return output.top(); } bool

java-57-用两个栈实现队列&amp;&amp;用两个队列实现一个栈

转自:http://bylijinnan.iteye.com/blog/1450125 ———————————————————————————————————————————— Java代码   import java.util.ArrayList; import java.util.List; import java.util.Stack; /* * Q 57 用两个栈实现队列 */ public class QueueImplementByTwoStacks { private Stack<

两个栈实现一个队列,两个队列实现一个栈

1.两个栈实现一个队列 有三种思路: 思路一:将stack1作为存储空间,将stack2作为临时缓冲区,入队时,直接压入stac1,出队时,将stack1中的元素依次出栈压入stack2中,再将stack2的栈顶元素弹出,最后将stack2中的元素再倒回给stack1 思路二:入队时,判断stack1是否为空,如果stack1为空,则将stack2中的所有元素都倒入stack1中,再将元素直接压入stack1,否则,直接压入stack1中 出队时,判断stack2是否为空,如果stack2为空,

两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

两个栈实现队列两个队列实现堆栈问题,网上有很多资料.这里仅仅是叙述操作方法的介绍觉得至少. 两个栈实现一个队列 思想:假设两个栈分别为s1,s2.对s1进行入队,出队时,先推断s2是否为空,假设是则将s1中元素压入s2并弹出最上面元素,假设不是,则直接弹出s2最上面的元素. <span style="font-size:18px;">EnQueue(s1,s2,k){ push(s1,k)</span><span style="font-fami

013使用两个栈实现一个队列(keep it up)

使用两个栈实现一个队列 队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列则将第一个栈的数据依次压入第二个栈,然后出栈. 两条规则: 1)进队列,则直接压入第一个栈 2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空, 则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空). 实际写代码时注意栈为空的情况. 代码: #include <iostream> #include <st

两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】

关于两个栈实现一个队列和两个队列实现一个栈问题,网上有很多资料.这里只描述自己认为操作最少的方法. 两个栈实现一个队列 思想:假设两个栈分别为s1,s2.对s1进行入队,出队时,先判断s2是否为空,如果是则将s1中元素压入s2并弹出最上面元素,如果不是,则直接弹出s2最上面的元素. <span style="font-size:18px;">EnQueue(s1,s2,k){ push(s1,k)</span><span style="font-

两个栈模拟一个队列和两个队列模拟一个栈

此为网易的一道笔试题.到时候秀逗,不知所云.后来研究之后记录下,以备以后经常翻阅. 栈:先进后出 push和pop 队列:先进先出 offer和poll (1)两个栈模拟一个队列 即将先进后出实现先进先出.比较容易理解,只要所有数据先往一个栈里push,然后将该栈中的数据依次pop出来再push进第二个队列,则顺序自然颠倒过来了,则每次pop是从第二个队列中取数据. import java.util.*; public class StackQueue{ private Stack<Intege

C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)

1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法用于将对象添加到 ArrayList 的结尾处:Remove方法用于从 ArrayList 中移除特定对象的第一个匹配项:RemoveAt方法用于移除 ArrayList 的指定索引处的元素:Insert方法用于将元素插入 ArrayList 的指定索引处. 示例 ArrayList的使用 示例将介