数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈

思路:

入栈操作:

  1. 直接对 queue_1 进行 add 操作

出栈操作:

  1. 若 queue_1 的长度 > 1,对 queue_1 进行 remove 操作,将这些数据放入 queue_2 中,直到 queue_1 只剩下一个元素为止
  2. queue_1 剩余的元素即为应该 出栈的元素, remove 操作
  3. 将 queue_2 中的元素放回到 queue_1 中

大致的示意图:

这里写图片描述

package com.dataStructure.stack;

import java.util.LinkedList;
import java.util.Queue;

public class UseQueueToImplStack {
    private Queue<Integer> queue_1;
    private Queue<Integer> queue_2;
    private int count;
    public UseQueueToImplStack(){
        queue_1 = new LinkedList<>();
        queue_2 = new LinkedList<>();
        count = 0;
    }
    public boolean isEmpty(){
        return count == 0;
    }
    public void push(int num){
        queue_1.add(num);
        count++;
    }

    public int pop(){
        while (queue_1.size() > 1)
            queue_2.add(queue_1.remove());
        int result = queue_1.remove();
        count--;

        while (!queue_2.isEmpty())
            queue_1.add(queue_2.remove());

        return result;
    }

    public static void main(String[] args){
        UseQueueToImplStack stack = new UseQueueToImplStack();
        stack.push(6);
        stack.push(2);
        stack.push(1);
        System.out.print(stack.pop() + " ");
        stack.push(3);
        System.out.print(stack.pop() + " ");
        stack.push(5);
        System.out.print(stack.pop() + " ");
        stack.push(7);

        while (!stack.isEmpty()){
            System.out.print(stack.pop() + " ");
        }

    }

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值