Python中实现队列的程序
队列是一种数据结构,它遵循先进先出(FIFO)原则。Python中的列表(list)可以用作队列,但是在执行一些具有高延迟的操作时,如插入和删除大量元素,队列的效率较低。因此,Python提供了collections模块中的deque类来更高效地实现队列。
使用Python列表作为队列
将Python列表作为队列,可以使用append()方法将元素添加到队列尾部,使用pop()方法从队列头部删除元素。
queue = []
queue.append(1)
queue.append(2)
queue.append(3)
print(queue) # 输出 [1, 2, 3]
queue.pop(0)
print(queue) # 输出 [2, 3]
在上面的代码中,我们在队列中添加三个元素,然后通过pop()方法从队列头部删除第一个元素,输出队列。
缺点是每次从队列头部删除元素时都会导致所有元素的位置都要改变,这将导致效率低下,并且在大数据量时会更加明显。
使用collections的deque类
Python中的collections模块提供了deque类,实现了一个双向队列,是队列、栈的通用数据结构。deque可以高效地从两端添加、删除元素。
from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
print(queue) # 输出 deque([1, 2, 3])
queue.popleft()
print(queue) # 输出 deque([2, 3])
在上面的代码中,我们使用deque()函数创建一个双向队列,并向队列添加三个元素。使用popleft()方法从队列头部删除第一个元素,输出队列。
完整实现一个双向队列
下面是一个完整的程序,用于实现一个双向队列,并进行添加、删除和输出操作。
from collections import deque
class Deque:
def __init__(self):
self.items = deque()
def is_empty(self):
return not bool(self.items)
def add_front(self, item):
self.items.appendleft(item)
def add_rear(self, item):
self.items.append(item)
def remove_front(self):
return self.items.popleft()
def remove_rear(self):
return self.items.pop()
def size(self):
return len(self.items)
def __str__(self):
return str(list(self.items))
d = Deque()
print(d.is_empty())
d.add_front('hello')
d.add_rear('world')
print(d)
d.add_front('python')
print(d)
d.remove_front()
print(d)
d.remove_rear()
print(d)
print(d.size())
在这个程序中,我们定义了一个Deque类,其中初始化一个空的双向队列。我们还实现了add_front()、add_rear()、remove_front()、remove_rear()和size()方法,分别用于添加元素、删除元素和获取队列长度。
结论
使用Python中的collections模块中的deque类可以实现高效的队列,避免了每次元素删除时列表的重新排序,提高了程序的性能。deque类的使用方法与Python列表使用非常相似,但可以更高效地进行添加、删除元素等操作。