Python中的双端队列
双端队列基本上是栈和队列结构的泛化,它从左到右初始化。它使用列表对象来创建双端队列。它为弹出和追加提供了 O(1) 的时间复杂度。
Deque 是一个标准库类,位于 **collections** 模块中。
要使用它,首先我们需要导入 collections 标准库模块。
import collections
在本节中,我们将了解 Deque 类的某些函数。
Deque 上的追加函数
有两种不同的追加类型。append() 方法用于在队列的右端添加元素,appendleft() 方法用于在队列的左侧追加元素。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('124dfre')
print('Dequeue: ' + str(my_deque))
#insert x at right and B at left
my_deque.append('x')
my_deque.appendleft('B')
print('Dequeue after appending: ' + str(my_deque))输出
Dequeue: deque(['1', '2', '4', 'd', 'f', 'r', 'e']) Dequeue after appending: deque(['B', '1', '2', '4', 'd', 'f', 'r', 'e', 'x'])
Deque 上的弹出函数
与追加类似,有两种不同的弹出函数类型。pop() 方法用于从队列中删除并返回最右边的元素,popleft() 方法用于删除并返回队列中最左边的元素。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('124dfre')
print('Dequeue: ' + str(my_deque))
#delete item from right and left
item = my_deque.pop()
print('Popped Item: ' + str(item))
item = my_deque.popleft()
print('Popped Item: ' + str(item))
print('Dequeue after pop operations: ' + str(my_deque))输出
Dequeue: deque(['1', '2', '4', 'd', 'f', 'r', 'e']) Popped Item: e Popped Item: 1 Dequeue after pop operations: deque(['2', '4', 'd', 'f', 'r'])
Deque 中与项目相关的函数
Deque 中的一些函数用于获取与项目相关的信息。有一些函数,例如 index()、count() 等。index 方法用于获取元素第一次出现的索引。当没有为元素传递参数时,它将选择整个列表,当指定了某个限制时,它将在该限制内检查索引。另一方面,count() 方法计算 Deque 中项目的频率。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('AABCDDEFD')
print('Dequeue: ' + str(my_deque))
#find the index of D
print('Index of D:' + str(my_deque.index('D')))
print('Index of D in range 5 to 8 is: ' + str(my_deque.index('D', 5, 8)))
#Count the number of occurrences
print('Occurrences of A: ' + str(my_deque.count('A')))
print('Occurrences of D: ' + str(my_deque.count('D')))输出
Dequeue: deque(['A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D']) Index of D:4 Index of D in range 5 to 8 is: 5 Occurrences of A: 2 Occurrences of D: 3
Deque 中的 insert() 和 remove() 函数
我们已经看到了 Deque 中用于分别插入和删除元素的 append 和 pop 函数。还有另外两种与插入和删除相关的函数。insert() 方法用于插入一个数字。在这种情况下,我们可以提供插入的索引。因此,可以在指定位置插入项目。remove() 方法用于删除元素的第一次出现。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('AABCDDEFD')
print('Dequeue: ' + str(my_deque))
#Insert letter G and H into the position 5, 7 respectively
my_deque.insert(5, 'G')
my_deque.insert(7, 'H')
print('Dequeue after inserting: ' + str(my_deque))
#Delete first occurrence of letter D
my_deque.remove('D')
print('Dequeue after removing: ' + str(my_deque))输出
Dequeue: deque(['A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D']) Dequeue after inserting: deque(['A', 'A', 'B', 'C', 'D', 'G', 'D', 'H', 'E', 'F', 'D']) Dequeue after removing: deque(['A', 'A', 'B', 'C', 'G', 'D', 'H', 'E', 'F', 'D'])
Deque 中的扩展函数
扩展函数用于将多个元素添加到 Deque 中。我们可以使用列表、元组等集合来提供多个值。有两种类型的扩展函数。extend() 方法用于将元素添加到右侧,它类似于重复的 append() 函数。extendleft() 方法用于将元素添加到左侧,它类似于重复的 appendleft() 函数。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('AABCDDEFD')
print('Dequeue: ' + str(my_deque))
#Extend by adding 1, 3, 5, 7 to the right and x, y, z to the left
my_deque.extend([1, 3, 5, 7])
my_deque.extendleft(['x', 'y', 'z'])
print('Dequeue after Extending: ' + str(my_deque))输出
Dequeue: deque(['A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D']) Dequeue after Extending: deque(['z', 'y', 'x', 'A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D', 1, 3, 5, 7])
Deque 中的反转和旋转函数
我们可以使用 reverse() 方法反转双端队列的顺序。还有另一种称为 rotate() 的方法。使用 rotate 方法,可以根据作为参数指定的数字旋转双端队列。如果参数为正数,则向右旋转,对于负数,则向左旋转。
示例代码
import collections as col
#Insert some elements into the queue at first
my_deque = col.deque('AABCDDEFD')
print('Dequeue: ' + str(my_deque))
my_deque.reverse()
print('Deque after Reversing:' + str(my_deque))
#rotate to the right, 3 elements
my_deque.rotate(3)
print('Deque after rotating:' + str(my_deque))输出
Dequeue: deque(['A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D']) Deque after Reversing:deque(['D', 'F', 'E', 'D', 'D', 'C', 'B', 'A', 'A']) Deque after rotating:deque(['B', 'A', 'A', 'D', 'F', 'E', 'D', 'D', 'C'])
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP