当前位置:实例文章 » JAVA Web实例» [文章]用栈实现队列&&用队列实现栈(LeetCode 232&&225)

用栈实现队列&&用队列实现栈(LeetCode 232&&225)

发布人:shili8 发布时间:2025-01-09 10:03 阅读次数:0

**用栈实现队列 && 用队列实现栈**

在计算机科学中,栈和队列是两种基本的数据结构,它们分别用于后进先出(LIFO)和先进先出(FIFO)的操作。虽然它们看起来很相似,但它们有着不同的使用场景和特点。在本文中,我们将讨论如何用栈实现队列和用队列实现栈。

**1. 用栈实现队列**

在 LeetCode232 中,我们被要求设计一个用栈实现队列的数据结构。这个问题看起来很简单,但实际上它需要我们深入理解栈和队列之间的关系。

### 栈实现队列的基本思路栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。虽然它们看起来很相反,但我们可以利用栈的特性来实现队列的功能。

基本思路是:当我们需要从队列中取出元素时,我们可以将所有元素都压入一个栈中,然后再次弹出栈顶元素。这就实现了队列的先进先出(FIFO)特性。

###代码示例

class MyQueue:

 def __init__(self):
 """
 Initialize your data structure here.
 """
 self.stack = []

 def push(self, x: int) -> None:
 """
 Push element x to the back of queue.
 """
 # 将元素压入栈中 self.stack.append(x)

 def pop(self) -> int:
 """
 Removes the element from in front of queue and returns that element.
 """
 # 检查栈是否为空 if not self.stack:
 raise IndexError("pop from an empty stack")
 # 将所有元素弹出到另一个栈中,直到只剩下一个元素 temp = []
 while len(self.stack) >1:
 temp.append(self.stack.pop())
 # 弹出栈顶元素 result = self.stack.pop()
 # 将其他元素重新压入栈中 while temp:
 self.stack.append(temp.pop())
 return result def peek(self) -> int:
 """
 Get the front element.
 """
 # 检查栈是否为空 if not self.stack:
 raise IndexError("peek from an empty stack")
 # 将所有元素弹出到另一个栈中,直到只剩下一个元素 temp = []
 while len(self.stack) >1:
 temp.append(self.stack.pop())
 # 弹出栈顶元素 result = self.stack.pop()
 # 将其他元素重新压入栈中 while temp:
 self.stack.append(temp.pop())
 return result def empty(self) -> bool:
 """
 Return whether the queue is empty.
 """
 return not self.stack


###代码注释* `push(x)` 方法将元素压入栈中。
* `pop()` 方法弹出栈顶元素,并将其他元素重新压入栈中,以实现队列的先进先出(FIFO)特性。
* `peek()` 方法返回栈顶元素,但不弹出该元素。
* `empty()` 方法检查栈是否为空。

**2. 用队列实现栈**

在 LeetCode225 中,我们被要求设计一个用队列实现栈的数据结构。这个问题看起来很简单,但实际上它需要我们深入理解队列和栈之间的关系。

### 队列实现栈的基本思路队列是一种先进先出(FIFO)的数据结构,而栈是一种后进先出(LIFO)的数据结构。虽然它们看起来很相反,但我们可以利用队列的特性来实现栈的功能。

基本思路是:当我们需要将元素压入栈中时,我们可以将所有元素都排成一个队列,然后再次取出队首元素并将其压入另一个队列中。这就实现了栈的后进先出(LIFO)特性。

###代码示例
class MyStack:

 def __init__(self):
 """
 Initialize your data structure here.
 """
 self.queue = []

 def push(self, x: int) -> None:
 """
 Push element x to the stack.
 """
 # 将元素压入队列中 self.queue.append(x)
 # 将其他元素排成一个新的队列 temp = []
 while len(self.queue) >1:
 temp.append(self.queue.pop(0))
 # 将新队首元素压入原队列 self.queue.insert(0, temp[0])
 # 将其他元素重新排成原队列 while temp:
 self.queue.append(temp.pop())

 def pop(self) -> int:
 """
 Removes the element from in top of stack and returns that element.
 """
 return self.queue.pop(0)

 def peek(self) -> int:
 """
 Get the top element.
 """
 return self.queue[0]

 def empty(self) -> bool:
 """
 Return whether the queue is empty.
 """
 return not self.queue


###代码注释* `push(x)` 方法将元素压入栈中。
* `pop()` 方法弹出栈顶元素。
* `peek()` 方法返回栈顶元素,但不弹出该元素。
* `empty()` 方法检查队列是否为空。

通过以上的代码示例和注释,我们可以看出,虽然用栈实现队列和用队列实现栈看起来很相似,但它们有着不同的使用场景和特点。

其他信息

其他资源

Top