栈、队列、堆|用栈实现队列|用队列实现栈|有效的括号|滑动窗口最大值|前 K 个高频元素|数组中的第k个最大元素|总结

栈与队列理论基础

一句话:

  • 栈是后进先出,队列是先进先出;栈的入栈和出栈操作都在同一端,都在栈顶进行,而队列的出队和入队分别在两端,从队头出队,从队尾入队

在Java中,Stack继承自Vector类,提供了的基本操作。主要方法:

  • boolean empty(): 检查栈是否为空。为空,返回true,否则返回false

  • E push(E item): 将元素压入栈顶。并返回该元素。

  • E pop(): 移除并返回栈顶元素。

  • E peek(): 返回栈顶元素但不移除

在Java中,Queue 是一个接口,表示队列数据结构。Queue 接口的实现类包括 LinkedListPriorityQueue 和 ArrayDeque 等。 Queue 接口的主要方法 :

  • boolean add(E e):
    将元素插入队列尾部。如果成功,返回 true,如果队列已满则抛异常。

  • E remove():
    移除并返回队列的头部元素。

  • E peek():
    返回队列的头部元素,但不移除。如果队列为空,返回 null。

  • int size():
    返回队列中的元素数量。

  • boolean isEmpty():
    检查队列是否为空。如果队列为空,返回 true,否则返回 false

  • boolean contains(Object o):
    检查队列中是否包含指定元素。

对于LinkedList实现类有以下特有的方法:

  • void addFirst(E e):
    将元素插入队列头部。

  • void addLast(E e):
    将元素插入队列尾部。

  • E removeFirst():
    移除并返回队列头部元素。

  • E removeLast():
    移除并返回队列尾部元素。

  • E getFirst():
    返回队列头部元素,但不移除

  • E getLast():
    返回队列尾部元素,但不移除

  • !注意: LinkedList 类有这些额外的方法是因为它还实现了 Deque 接口,也就是说这些方法是 Deque 接口中才有的,因此 queue 的类型需要声明为 Deque<T> 类型,才能调用 getLast() 等方法
  • Deque 接口继承了 Queue 接口
  • 双端队列(Deque):LinkedList 作为双端队列使用时,支持从队列的头部和尾部添加、移除和查看元素

232.用栈实现队列

力扣题目链接(opens new window)

使用栈实现队列的下列操作:

push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。

注意:每次将输入栈中的元素导入到输出栈中时,需要全部导入,否则先后顺序会出现混乱。

class MyQueue {
    // 思路:维护两个栈
    // 一个输入栈用于模拟入队
    // 一个输出栈用于模拟出队
    // 当pop或peek时,将输入栈中元素依次pop然后push到输出栈
    // 这样输出栈pop的就是最先进入输入栈的元素,实现了先进先出

    private Stack<Integer> InStack;
    private Stack<Integer> OutStack;

    public MyQueue() {// 构造函数
        InStack = new Stack<>();
        OutStack = new Stack<>();
    }

    public void push(int x) {
        // 将x直接压入输入栈
        InStack.push(x);

    }

    public int pop() {// 弹出并返回值
        // 首先判断输出栈是否为空
        // 为空,则先将输入栈中所有元素push到输出栈,再进行pop
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值