Python数据结构之栈、队列及双端队列
概述
栈(Stack)、队列(Queue)和双端队列(Deque)是Python中常用的数据结构。它们的主要应用是在计算机程序中存储和操作数据。
栈和队列都是线性数据结构,但与列表(List)或元组(Tuple)不同,它们有一些显著的特性。比如,栈只允许从顶部添加或删除项,而队列只允许从队列的前端(或末尾)添加或删除项;队列称为先进先出FIFO(First In First Out),而栈则被称为后进先出LIFO(Last In First Out);双端队列则可以在前端或末尾添加或删除项。
在下面的内容中,我们将介绍如何使用Python内置的列表和集合(Deque)类型来实现栈、队列和双端队列。
栈(Stack)
栈是一种后进先出(LIFO)的数据结构,通常用中括号”[ ]“表示。栈中每个元素被称为一个”项“,在Python中使用列表来表示栈。栈的两个主要操作是推入(Push)和弹出(Pop),其中推入将添加一个项到栈顶,弹出将移除栈顶的项。
掌握栈数据结构的常用操作,提供以下代码示例:
- 创建空栈
stack = []
- 判断栈是否为空
if not stack:
print("Stack is empty")
- 推入项
可以使用append()方法将项添加到列表末尾
stack.append("A")
stack.append("B")
print(stack) # ['A', 'B']
- 弹出项
可以使用pop()方法从列表末尾删除项
stack.pop()
print(stack) # ['A']
队列(Queue)
队列是一种先进先出(FIFO)的线性数据结构,简单来说就是在队列的末尾添加元素,从队列的头部删除元素。队列通常使用中括号”[ ]“表示。在Python中,使用列表来实现队列的操作。
掌握队列数据结构的常用操作,提供以下代码示例:
- 创建空队列
queue = []
- 判断队列是否为空
if not queue:
print("Queue is empty")
- 向队列中添加一个元素
可以使用append()方法将项添加到列表末尾
queue.append("A")
queue.append("B")
print(queue) # ['A', 'B']
- 从队列中删除一个元素
可以使用pop(0)方法从列表的第一个位置删除项
queue.pop(0)
print(queue) # ['B']
双端队列(Deque)
双端队列同样是一种线性数据结构,区别在于双端队列两端都可以添加或删除元素。双端队列具有队列和栈的属性,所以它是一种非常有用的数据结构。在Python中,双端队列的实现方式是使用集合类collections中的deque。
掌握双端队列数据结构的常用操作,提供以下代码示例:
- 创建空的双端队列
from collections import deque
deq = deque()
- 判断双端队列是否为空
if not deq:
print("Deque is empty")
- 向双端队列的末尾添加元素
可以使用append()方法将项添加到集合的末尾
deq.append("A")
deq.append("B")
print(deq) # deque(['A', 'B'])
-
从双端队列两端删除元素
- 利用
popleft()
方法删除队列左端第一个元素 - 用pop()方法删除队列右端第一个元素
- 用pop()方法删除队列左端第一个元素
- 利用
popright()
方法删除队列右端第一个元素
代码示例:
“`python
deq.popleft()
print(deq) # deque([‘B’])deq.pop()
print(deq) # deque([])deq.appendleft(“C”)
print(deq) # deque([‘C’])deq.pop()
print(deq) # deque([])
“` - 利用
结语
在Python中,栈、队列和双端队列是常用的数据结构。Python内置的列表和集合类型提供了方便的方法来实现栈、队列和双端队列。理解这些数据结构的实现和操作将对编程很有用。在实际应用中,用户需要根据实际情况灵活运用。