📜  Python中的堆栈和队列

📅  最后修改于: 2022-05-13 01:54:28.589000             🧑  作者: Mango

Python中的堆栈和队列

先决条件: Python中的列表和双端队列。

与 C++ STL 和Java集合不同, Python确实具有用于堆栈和队列的特定类/接口。以下是在Python中实现的不同方法

1) 使用列表
Stack的工作原理是“后进先出”。此外, Python中的内置函数使代码简洁明了。要将一个项目添加到列表的顶部,即推送一个项目,我们使用append()函数并使用pop()函数弹出一个元素。这些功能在最终操作中高效而快速地工作。

让我们看一个例子,试着理解 push() 和 pop()函数的工作原理:
例子:

# Python code to demonstrate Implementing 
# stack using list
stack = ["Amar", "Akbar", "Anthony"]
stack.append("Ram")
stack.append("Iqbal")
print(stack)
  
# Removes the last item
print(stack.pop())
  
print(stack)
  
# Removes the last item
print(stack.pop())
  
print(stack)
输出:
['Amar', 'Akbar', 'Anthony', 'Ram', 'Iqbal']
Iqbal
['Amar', 'Akbar', 'Anthony', 'Ram']
Ram
['Amar', 'Akbar', 'Anthony']

队列的工作原理是“先进先出”。下面是队列的列表实现。我们使用 pop(0) 从列表中删除第一项。

# Python code to demonstrate Implementing 
# Queue using list
queue = ["Amar", "Akbar", "Anthony"]
queue.append("Ram")
queue.append("Iqbal")
print(queue)
  
# Removes the first item
print(queue.pop(0))
  
print(queue)
  
# Removes the first item
print(queue.pop(0))
  
print(queue)
输出:
['Amar', 'Akbar', 'Anthony', 'Ram', 'Iqbal']
Amar
['Akbar', 'Anthony', 'Ram', 'Iqbal']
Akbar
['Anthony', 'Ram', 'Iqbal']

2)使用双端队列
在堆栈的情况下,列表实现工作正常,并在 O(1) 时间内提供 append() 和 pop()。当我们使用双端队列实现时,我们得到相同的时间复杂度。

# Python code to demonstrate Implementing 
# Stack using deque
from collections import deque
queue = deque(["Ram", "Tarun", "Asif", "John"])
print(queue)
queue.append("Akbar")
print(queue)
queue.append("Birbal")
print(queue)
print(queue.pop())                 
print(queue.pop())                 
print(queue)
输出:
deque(['Ram', 'Tarun', 'Asif', 'John'])
deque(['Ram', 'Tarun', 'Asif', 'John', 'Akbar'])
deque(['Ram', 'Tarun', 'Asif', 'John', 'Akbar', 'Birbal'])
Birbal
Akbar
deque(['Ram', 'Tarun', 'Asif', 'John'])

但是说到队列,上面的列表实现效率不高。当 pop() 从列表的开头开始时在队列中,这很慢。这是由于 list 的属性,它在结束操作时很快但在开始操作时很慢,因为所有其他元素都必须一个一个地移动。
因此,我们更喜欢使用 dequeue 而不是 list,它专门设计用于从前端和后端快速追加和弹出。

让我们看一个例子,并尝试使用 collections.deque 来理解队列:

# Python code to demonstrate Implementing 
# Queue using deque
from collections import deque
queue = deque(["Ram", "Tarun", "Asif", "John"])
print(queue)
queue.append("Akbar")
print(queue)
queue.append("Birbal")
print(queue)
print(queue.popleft())                 
print(queue.popleft())                 
print(queue)
输出:
deque(['Ram', 'Tarun', 'Asif', 'John'])
deque(['Ram', 'Tarun', 'Asif', 'John', 'Akbar'])
deque(['Ram', 'Tarun', 'Asif', 'John', 'Akbar', 'Birbal'])
Ram
Tarun
deque(['Asif', 'John', 'Akbar', 'Birbal'])