数据结构两栈模拟一个队列代码
时间: 2024-10-29 21:11:04 浏览: 11
Java模拟栈和队列数据结构的基本示例讲解
在编程中,可以使用两个栈(Stack)来模拟一个队列(Queue),这是因为队列的特点是先进先出(FIFO),而栈也是后进先出(LIFO)。以下是使用Python语言的一个基本实现:
```python
class Queue:
def __init__(self):
self.stack1 = [] # 第一个栈
self.stack2 = [] # 第二个栈
# 入队操作,将元素压入第一个栈
def enqueue(self, item):
self.stack1.append(item)
# 出队操作,如果堆栈2为空,则将堆栈1的所有元素移至堆栈2,然后弹出堆栈2顶部元素
def dequeue(self):
if not self.is_empty(): # 检查队列是否为空
while self.stack1: # 如果堆栈1非空
self.stack2.append(self.stack1.pop()) # 将所有元素移到堆栈2
return self.stack2.pop() # 返回并移除堆栈2顶部元素
else:
raise Exception("队列已空")
# 检查队列是否为空
def is_empty(self):
return len(self.stack1) == 0 and len(self.stack2) == 0
# 使用示例
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
print(queue.dequeue()) # 输出: 1
print(queue.dequeue()) # 输出: 2
```
在这个模拟中,`enqueue`操作直接将元素压入`stack1`,`dequeue`操作则会检查`stack2`是否为空,如果空就将`stack1`的所有元素依次移到`stack2`,然后再从`stack2`返回和移除顶部元素。
阅读全文