python的queue模块,
在“数据结构”课程中,最常讲授的数据结构是堆栈、队列和队列。
Stack是一种特殊的线性表,只允许一端插入和删除,称为栈顶,另一端称为栈底。
从栈顶插入一个元素叫做pushing,并且在栈顶插入一个元素叫做“推入栈”,对应的英文表达是push相应地,从栈顶删除一个元素叫做pop,从栈顶删除一个元素叫做pop。
对于栈来说,栈上的第一个元素位于栈底,只有当上面的元素都出栈了,底部的元素才能出栈。因此,堆栈是一种后进先出(LIFO)线性表。图1显示了堆栈的操作图。
Queue也是一个特殊的线性表,只允许在表的前面删除,在表的后面插入。插入操作的结束称为队列的结束,删除操作的结束称为队列的头。
对于队列,每个元素总是从队列的后端进入队列,然后当前元素可以在它之前的所有元素出队之后出队。因此,队列是一个先进先出(FIFO)线性表。队列图如图2所示。
dequee(也就是这里介绍的dequee)代表一种特殊的队列,可以在两端同时插入和删除,如图3所示。
对于一个双端队列,它可以从两端插入和删除。如果程序在一端修复了所有的插入和删除操作,那么队列就变成了一个堆栈。如果在一端只添加元素,在另一端只删除元素,那么它就成了一个队列。因此,deque既可以用作队列,也可以用作堆栈。
Deque位于collections包下。首先在交互式解释器中导入collections包,然后在dir中输入[e for e(collections。dequee)if not e . starts with( _ )]命令查看dequee的所有方法。您可以看到以下输出结果:
fromcollectionsimportdeque
[efore indir(deque)if note . starts with( _ )]
[append , appendleft , clear , copy , count , extend , index , insert , maxlen , pop , popleft , remove , reverse , rotate]
从上面的方法可以看出,deque的方法基本上有两个版本,体现了它作为一个deque的特点。德克尔的左边(左)相当于它的队列头(前),右边(右)相当于它的队列尾(后):
Append和appendleft:将元素添加到deque的右边或左边,即默认情况下在队列的末尾添加元素。
和popleft:弹出deque右边或左边的元素,即默认弹出队列末尾的元素。
Extend和extendleft:在deque的右边或左边添加多个元素,即默认在队列的末尾添加多个元素。
deque中的clear()方法用于清空队列;insert()方法是一种线性表方法,用于在指定位置插入元素。
如果程序想使用deque作为堆栈,这意味着只在一端添加和删除元素,所以调用append和pop方法。例如,下面的程序:
从上面的方法可以看出,deque的方法基本上有两个版本,体现了它作为一个deque的特点。德克的左边(左
)就相当于它的队列头(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”最先出栈,这体现了栈的 LIFO 的特征。Swift
Erlang
deque(['Kotlin','Python'])
假如程序要把 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'])从上面的运行结果可以看出,程序先添加的元素“Katlin”最先出队列,这体现了队列的 FIFO 的特征。Kotlin
Python
deque(['Erlang','Swift'])
此外,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])从上面的输出结果来看,每次执行 rotate() 方法,deque 的队尾元素都会被移到队头,这样就形成了首尾相连的效果。q中的元素:deque([4,0,1,2,3])
q中的元素:deque([3,4,0,1,2])
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。