LeetCode[232] 用栈实现队列 java版

栈:后进先出

入栈 a->b->c
出栈 c->b->a
在这里插入图片描述

队列:先进先出

在这里插入图片描述

思路:

栈和队列的区别,无非是栈是一头堵住的,队列是两头通的管道,
那我们把栈底堵住那头打通用来出栈不就行了

1、搞个栈stack1做队尾,用来入队

2、再搞个栈stack2把stack1数据压进去实现数据翻转

3、 入栈在stack1进行
出栈、查询则在stack2进行

4、注意每次出栈后将数据灌回stack1

如下图
在这里插入图片描述

代码实现:

package com.test.hlwyy;

import java.util.Stack;

public class MyQueue {
    private Stack<Integer> stack1= new Stack<>();
    private Stack<Integer> stack2= new Stack<>();
    //两个栈之间倒数据
    void turnStack(Stack<Integer> stack1, Stack<Integer> stack2) {
        while(!stack1.isEmpty()){
            stack2.push(stack1.peek());
            stack1.pop();
        }
    }
    public MyQueue() {}
    //入栈
    void push(int x) {
        stack1.push(x);
    }
    //出队
    int pop() {
        //stack1数据倒给stack2
        turnStack(stack1, stack2);
        //获取stack2队头
        int top = stack2.peek();
        //队头出队
        stack2.pop();
        //stack2数据再倒给stack1
        turnStack(stack2, stack1);
        return top;
    }
    //  获取队头元素  
    int peek() {
        turnStack(stack1, stack2);
        int top = stack2.peek();
        turnStack(stack2, stack1);
        return top;
    }
    //判空
    Boolean empty() {
        return stack1.empty();
    }
}

测试结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值