【算法】两个栈实现一个队列

losetowin 发布于:2017-4-9 16:45 分类:Java  有 869 人浏览,获得评论 0 条 标签: 算法 

本文地址:http://www.dutycode.com/suanfa_lianggezhanshixianyigeduilie.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

问题描述

使用两个栈实现一个队列,实现pop方法和push方法,存储元素为int数据

思路

使用stack1做数据存储,使用stack2做临时数据中转。pop时,将stack1的数据转到stack2中,然后pop一个出来。之后将stack2的数据pop到stack1中。


代码实现

/**
 * 两个栈模拟一个队列(先进先出)
 * @author www.dutycode.com
 *
 */
class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();

public void push(Integer i) {
stack1.push(i);
}

public Integer pop() {
while (!stack1.empty()) {
stack2.push(stack1.pop());
}

int ret = stack2.pop();

//stack1已经被全部pop出来了,所以需要将stack2的数据转移到stack1中,用于后面用。处理完之后stack2将被清空
while (!stack2.empty()){
stack1.push(stack2.pop());
}
return ret;
}
}

测试代码

public static void main(String[] args) {

Solution s = new Solution();
s.push(10);
s.push(20);
s.push(30);

System.out.println(s.pop());
System.out.println(s.pop());
}

版权所有:《攀爬蜗牛》 => 《【算法】两个栈实现一个队列
本文地址:https://www.dutycode.com/suanfa_lianggezhanshixianyigeduilie.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。