1.三种实现
- 列表:list
- 队列:Queue
- 双端队列:deque
性能:从上往下依次变好,其中deque比Queue快10倍以上
1.1 list模拟队列
length = 10
q = []# 入队
for i in range(length):q.append(i)
print(q)
print(len(q))# 出队
for i in range(length):print(q[0], end = '')del q[0]
print(q)
print(len(q))# 判断队空
if not q:print("empty")
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10
0 1 2 3 4 5 6 7 8 9
0
empty
1.3 deque双端队列
补充
双端队列和列表的区别
- 双端队列在开头添加/删除元素时,性能比列表好得多
- 双端队列下标访问的时间复杂度为O(N),而列表为O(1)
1.3.1 常用操作
from collections import deque# 创建一个空的deque
d = deque()# 从右侧添加元素
d.append('a')
d.append('b')
print(d) # 输出:deque(['a', 'b'])# 从左侧添加元素
d.appendleft('c')
print(d) # 输出:deque(['c', 'a', 'b'])# 从右侧移除元素
right_item = d.pop()
print(right_item) # 输出:'b'
print(d) # 输出:deque(['c', 'a'])# 从左侧移除元素
left_item = d.popleft()
print(left_item) # 输出:'c'
print(d) # 输出:deque(['a'])
deque(['a', 'b'])
deque(['c', 'a', 'b'])
b
deque(['c', 'a'])
c
deque(['a'])
1.3.2 表示链表
# encoding: utf-8
from collections import deque# 创建链表
linklist = deque()# append添加元素,时:O(1)
linklist.append(15)
linklist.append(21)
linklist.append(32)
print(linklist)# 访问元素,时:O(N)
element = linklist[1]
print(element)# 搜索元素
index = linklist.index(32)
print(index)# 更新元素
linklist[0] = 1
print(linklist)# 删除元素
element = linklist.popleft()
print(element)# 计算长度
length = len(linklist)
print(length)