代码随想录算法训练营第10天| 232.用栈实现队列225.用队列实现栈

文章详细介绍了如何使用栈和队列来实现Deque的基本操作,如push、pop、peek和empty。提供了两种实现方式,一种是用栈实现队列,另一种是用队列实现栈,这两种方法都利用了Java中的ArrayDeque。在LeetCode上有相应的题目进行实践。

前言

复习栈和队列原理,熟悉Deque操作

232.用栈实现队列

题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html

直接使用双端队列当栈

class MyQueue {
    Deque<Integer> stackin;
    Deque<Integer> stackout;

    public MyQueue() {
        stackin = new ArrayDeque<>();
        stackout = new ArrayDeque<>();
    }
    
    public void push(int x) {
        stackin.offerFirst(x);
    }
    
    public int pop() {
        if(!stackout.isEmpty()) {
            return stackout.pollFirst();
        }else {
            while(!stackin.isEmpty()) {
                stackout.offerFirst(stackin.pollFirst());
            }
            return stackout.pollFirst();
        }
    }
    
    public int peek() {
        if(!stackout.isEmpty()) {
            return stackout.peekFirst();
        }else {
            while(!stackin.isEmpty()) {
                stackout.offerFirst(stackin.pollFirst());
            }
            return stackout.peekFirst();
        }
    }
    
    public boolean empty() {
        if(stackin.isEmpty() && stackout.isEmpty()) {
            return true;
        }else return false;

    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

225.用队列实现栈

题目链接:https://leetcode.cn/problems/implement-stack-using-queues/
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

双端队列

class MyStack {
    Deque<Integer> deque;
    public MyStack() {
        deque = new ArrayDeque<>();
    }
    
    public void push(int x) {
        deque.offerFirst(x);
    }
    
    public int pop() {
        return deque.pollFirst();
    }
    
    public int top() {
        return deque.peekFirst();
    }
    
    public boolean empty() {
        return deque.isEmpty();
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值