数据结构【栈】(十):使用栈实现队列

问题描述

使用两个栈模拟队列,比如输入:1 2 3 4,则要求输出仍是:1 2 3 4

解题思路

1、有两个栈,一个用来存放入队数据(数据栈),一个用来辅助(辅助栈)实现数据出队。

2、数据添加时,会依次压人栈,取数据时会取栈顶元素,但要模拟队列的先进先出,所以就得取栈底元素,那么辅助栈就派上用场了,把数据栈的元素依次弹出到辅助栈,保留最后一个元素,数据栈就直接把元素弹出,这时数据栈就已经空了。

3、辅助栈的元素依次压人数据栈,这样我们就成功取到了栈底元素。

代码实现

public class Stack2Queue {
    /**
     * 用栈的入栈和出栈
     * 来实现队列的入队和出队
     * stack1是入栈的,stack2是出栈的。
     * 入队列:直接压入stack1即可
     * 出队列:如果stack2不为空,把stack2中的栈顶元素直接弹出;
     * 否则,把stack1的所有元素全部弹出压入stack2中,再弹出stack2的栈顶元素
     */
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();

    public void add(Object o) {
        stack1.push(o);
    }

    public Object poll() {
        Object o = null;

        if (stack2.size()== 0) {
            //把stack1的数据放入stack2,留下最后一个数据
            while (stack1.size() > 1) {
                stack2.push(stack1.pop());
            }
            if (stack1.size() == 1) {
                //把stack1的留下的那个数据返回出去
                o = stack1.pop();
            }
        } else {
            o = stack2.pop();
        }

        return o;
    }

    public int length() {
        return stack1.size() + stack2.size();
    }

    public static void main(String[] args) {
        /**
         * 用两个栈实现队列
         * */
        Stack2Queue stack2Queue = new Stack2Queue();
        stack2Queue.add("a");
        stack2Queue.add("b");
        stack2Queue.add("c");
        stack2Queue.add("d");
        stack2Queue.add("e");
        while(stack2Queue.length()>0) {
            System.out.println(stack2Queue.poll());
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值