“”"
队列(Queue)和双端队列(Deque, Double-ended Queue)都是线性数据结构,但它们在操作上有所不同:
队列(Queue):
队列遵循先进先出(FIFO, First-In-First-Out)原则。
元素只能从队尾添加(enqueue),并从队头移除(dequeue)。
标准的队列不允许直接访问或修改队列中间的元素。
Python标准库中的queue模块提供了不同类型的队列实现,如Queue、LifoQueue(后进先出)、PriorityQueue(优先级队列)等。
双端队列(Deque):
双端队列在两端都可以进行添加和移除操作,即允许从队头添加(enqueue)和移除(dequeue),同时也允许从队尾添加(append)和移除(pop)。
它可以当作普通队列使用,也可以当作栈(Stack)来用,因为栈是后进先出(LIFO)的数据结构,而双端队列的右端添加和移除功能恰好符合这一特性。
双端队列还可以进行任意位置的元素插入和删除(如果支持的话),这使得它比标准队列更加灵活。
“”"
Queue
import queue
from collections import dequeq = queue.Queue()q.put('item1')
q.put('item2')item = q.get()
print(item)item = q.get()
print(item)if q.empty():print("Queue is empty")print('*'*50)q2 = deque()
q2.append('data1')
q2.append('data2')
q2.appendleft('space1')
q2.appendleft('space2')print(q2) # deque(['space2', 'space1', 'data1', 'data2'])
d1 = q2.pop()
d2 = q2.popleft()
d3 = q2.pop()
d4 = q2.popleft()print(d1)
print(d2)
print(d3)
print(d4)if not q2:print('deque is empty!')