当前位置: 首页 > 图灵资讯 > 行业资讯> Python queue双端队列模块及用法

Python queue双端队列模块及用法

发布时间:2025-10-10 17:47:57

在“数据结构”课程中,最常见的数据结构包括栈、队列和双端队列。

栈是一种特殊的线性表,只允许在一端插入和删除。这一端称为栈顶(top),另一端称为栈底(bottom)。

将一个元素插入栈顶称为进栈,将一个元素插入栈顶称为“压入栈” push;相应地,从栈顶删除一个元素叫做出栈,从栈顶删除一个元素叫做“弹出栈” pop。

对于堆栈来说,第一个进入堆栈的元素位于堆栈的底部。只有当上述所有元素都离开堆栈时,堆栈底部的元素才能离开堆栈。因此,堆栈是一种后进先出(LIFO)线性表。如图所示 1 所示为栈的操作示意图。

2-1Z225151411626 (1).gif

队列也是一种特殊的线性表,只允许在表的前端(front)删除操作,在表的后端(rear)插入操作。插入操作的端称为队尾,删除操作的端称为队头。

对于一个队列来说,每个元素总是来自队列 rear 端进队列,然后等待元素之前的所有元素出队,当前元素才能出队。因此,队列是先进先出的(FIFO)线性表。队列示意图如图所示 2 所示。

2-1Z22515142N00.gif

双端队列(即此处介绍的) deque)它代表一个特殊的队列,可以同时插入和删除两端,如图所示 3 所示。2-1Z225151440Z7.gif

对于双端队列,可以从两端插入和删除。如果程序将所有插入和删除操作固定在一端,则双端队列将成为栈;如果一端只添加元素,另一端只删除元素,则成为队列。因此,deque 它可以作为队列或堆栈使用。

deque 位于 collections 首先在交互式解释器中导入包 collections 包,然后输入 [e for e in dir(collections.deque) if not e.startswith('_')] 命令来查看 deque 所有方法都可以看到以下输出结果:

>>>fromcollectionsimportdeque
>>>[eforeindir(deque)ifnote.startswith('_')]
['append','appendleft','clear','copy','count','extend','extendleft','index','insert','maxlen','pop','popleft','remove','reverse','rotate']

从以上方法可以看出,deque 基本上有两个版本的方法,这反映了它作为双端队列的特点。deque 的左边(left)相当于它的队列头(front),右边(right)相当于它的队列尾(rear):

append 和 appendleft:在 deque 在右侧或左侧添加元素,即默认在队列尾部添加元素。

pop 和 popleft:在 deque 右侧或左侧弹出元素,即默认在队列尾部弹出元素。

extend 和 extendleft:在 deque 在右侧或左侧添加多个元素,即默认在队列尾部添加多个元素。

deque 中的 clear() 该方法用于清空队列:insert() 该方法是将元素插入指定位置的线性表的方法。

假如程序要把 deque 作为栈使用,意味着只在一端添加和删除元素,所以调用 append 和 pop 方法就够了。例如,以下程序:

从以上方法可以看出,deque 基本上有两个版本的方法,这反映了它作为双端队列的特点。deque 的左边(left)相当于它的队列头(front),右边(right)相当于它的队列尾(rear):

append 和 appendleft:在 deque 在右侧或左侧添加元素,即默认在队列尾部添加元素。

pop 和 popleft:在 deque 右侧或左侧弹出元素,即默认在队列尾部弹出元素。

extend 和 extendleft:在 deque 在右侧或左侧添加多个元素,即默认在队列尾部添加多个元素。

deque 中的 clear() 该方法用于清空队列:insert() 该方法是将元素插入指定位置的线性表。

假设程序要把 deque 作为栈使用,意味着只在一端添加和删除元素,所以调用 append 和 pop 方法就够了。例如,以下程序:

fromcollectionsimportdeque
stack=deque(('Kotlin','Python'))
#元素入栈
stack.append('Erlang')
stack.append('Swift')
print('stack中的元素:',stack)
#元素出栈后,添加的元素先出栈
print(stack.pop())
print(stack.pop())
print(stack)

操作上述程序时,可以看到以下操作结果:

stack中的元素:deque(['Kotlin','Python','Erlang','Swift'])
Swift
Erlang
deque(['Kotlin','Python'])

从以上操作结果可以看出,程序最终进入栈的元素“Swift“第一个出栈,体现了栈 LIFO 特征。如果程序需要把程序。 deque 作为队列使用意味着一端只用于添加元素,另一端只用于删除元素,因此调用 append、popleft 方法就够了。例如,以下程序:

fromcollectionsimportdeque
q=deque(('Kotlin','Python'))
#加入队列中的元素
q.append('Erlang')
q.append('Swift')
print('q中的元素:',q)
#元素出队列,先添加元素出队列
print(q.popleft())
print(q.popleft())
print(q)

操作上述程序时,可以看到以下操作结果:

q中的元素:deque(['Kotlin','Python','Erlang','Swift'])
Kotlin
Python
deque(['Erlang','Swift'])

从以上操作结果可以看出,程序首先添加的元素“Katlin“第一个队列,这反映了队列 FIFO 的特征。

此外,deque 还有一个 rotate() 该方法的作用是将队列的队尾元素移动到队头,使其首尾相连。例如,以下程序:

fromcollectionsimportdeque
q=deque(range(5))
print('q中的元素:',q)
#执行旋转,使其首尾相连
q.rotate()
print('q中的元素:',q)
#再次执行旋转,使其首尾相连
q.rotate()
print('q中的元素:',q)

在操作上述程序时,可以看到以下输出结果:

q中的元素:deque(0,1,2,3,4)
q中的元素:deque(4、0、1、2、3)
q中的元素:deque(3、4、0、1、2)

从上述输出结果来看,每次执行 rotate() 方法,deque 所有的队尾元素都会移到队头,从而形成首尾相连的效果。

相关文章

Python queue双端队列模块及用法

Python queue双端队列模块及用法

2025-10-10
Python之列表的增删改查

Python之列表的增删改查

2025-10-10
Python itertools模块:生成迭代器(实例分析)

Python itertools模块:生成迭代器(实例分析)

2025-10-10
Python中的变量命名规则

Python中的变量命名规则

2025-10-09
Python之运算符汇总

Python之运算符汇总

2025-10-09
一文带你了解编码集

一文带你了解编码集

2025-10-09