跳到主要内容

Java中使用双端队列模拟栈和队列操作

在 Java 中,Deque(双端队列)是一个非常灵活的数据结构,可以用来模拟栈(Stack)和队列(Queue)的操作。本文将介绍如何使用 Deque 统一实现栈和队列的常用操作。

作为栈使用

Deque 作为栈使用时,我们主要在头部进行操作。以下是常用的栈操作:

Deque<Integer> stack = new ArrayDeque<>();

// 入栈 - 使用头部插入
stack.addFirst(element); // 替代 push()

// 出栈 - 从头部移除
stack.removeFirst(); // 替代 pop()

// 查看栈顶 - 查看头部
stack.peekFirst(); // 替代 peek()

说明

  • addFirst(element):在头部插入元素,相当于栈的入栈操作。
  • removeFirst():从头部移除元素,相当于栈的出栈操作。
  • peekFirst():查看头部元素,相当于查看栈顶元素。

作为队列使用

Deque 作为队列使用时,我们通常在尾部插入元素,在头部移除元素。以下是常用的队列操作:

Deque<Integer> queue = new ArrayDeque<>();

// 入队 - 使用尾部插入
queue.addLast(element); // 替代 offer()

// 出队 - 从头部移除
queue.removeFirst(); // 替代 poll()

// 查看队首 - 查看头部
queue.peekFirst(); // 替代 peek()

说明

  • addLast(element):在尾部插入元素,相当于队列的入队操作。
  • removeFirst():从头部移除元素,相当于队列的出队操作。
  • peekFirst():查看头部元素,相当于查看队首元素。

统一操作的好处

  1. 直观性:操作方法清晰地表明了操作发生的位置(First/Last)。
  2. 一致性:保持了代码风格的一致性,避免了不同方法名(push/pop/offer/poll)的混淆。
  3. 易理解:更容易理解数据结构的实际操作过程。

使用建议

  • 如果希望在操作失败时得到 null 而不是异常,可以使用:
    • offerFirst()/offerLast() 替代 addFirst()/addLast()
    • pollFirst()/pollLast() 替代 removeFirst()/removeLast()