deque双端队列
1、extend():
一次性从右端添加多个元素。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def extend(self, value):
"""extend():一次性从右端添加多个元素"""
return self.items.extend(value)
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# 一次性从右端添加多个元素
q.extend([4, 5, 6])
print("extend()一次性从右端添加多个元素:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# extend()一次性从右端添加多个元素: deque([1, 2, 3, 4, 5, 6])
2、append():
从右端添加一个元素。
class Queue():
def __init__(self, value):
self.items = deque(value)
def append(self, value):
"""append():从右端添加一个元素"""
return self.items.append(value)
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# 从右端添加一个元素
q.append(7)
print("append()从右端添加一个元素:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# append()从右端添加一个元素: deque([1, 2, 3, 7])
3、extendleft():
从左端添加多个元素,注意是逆序输入。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def extendLeft(self, value):
"""extendleft():从左端添加多个元素,注意是逆序输入"""
return self.items.extendleft(value)
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# 从左端添加多个元素,注意是逆序输入
q.extendLeft([8, 9, 10])
print("extendleft()从左端添加多个元素,注意是逆序输入:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# extendleft()从左端添加多个元素,注意是逆序输入: deque([10, 9, 8, 1, 2, 3])
4、appendleft():
从左端添加一个元素。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def appendLeft(self, value):
"""appendleft():从左端添加一个元素"""
return self.items.appendleft(value)
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# 从左端添加一个元素
q.appendLeft([11, 12])
print("appendleft()从左端添加一个元素:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# appendleft()从左端添加一个元素: deque([[11, 12], 1, 2, 3])
5、pop():
从右端移除元素。
注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def pop(self):
"""
pop():从右端移除元素
注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素
"""
return self.items.pop()
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# pop():从右端移除元素
q.pop()
print("pop()从右端移除元素:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# pop()从右端移除元素: deque([1, 2])
6、popleft():
从左端移除元素。
注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def popLeft(self):
"""
popleft():从左端移除元素
注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素
"""
return self.items.popleft()
if __name__ == "__main__":
q = Queue([1, 2, 3])
print("原始queue:",q.items)
# 从左端移除元素
q.popLeft()
print("popleft()从左端移除元素:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3])
# popleft()从左端移除元素: deque([2, 3])
7、rorate(param):
旋转移动元素。
当参数为正整数n,rorate()将向右移动n位,并将队列右端的n个元素移到左端;
当参数为负数-n时,rorate()将向左移动n位,并将队列左端的n个元素移到右端。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def rotateRight(self, param):
"""
rorate(param):旋转移动元素
当参数为正整数n,rorate()将向右移动n位,并将队列右端的n个元素移到左端
"""
return self.items.rotate(param)
def rotateLeft(self, param):
"""
rorate(param):旋转移动元素
当参数为负数-n时,rorate()将向左移动n位,并将队列左端的n个元素移到右端
"""
return self.items.rotate(param)
if __name__ == "__main__":
q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("原始queue:",q.items)
# 旋转移动元素(右移)
q.rotateRight(3)
print("rorate(param)旋转移动元素(右移):", q.items)
# 旋转移动元素(左移)
q.rotateRight(-3)
print("rorate(param)旋转移动元素(左移):", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# rorate(param)旋转移动元素(右移): deque([8, 9, 10, 1, 2, 3, 4, 5, 6, 7])
# rorate(param)旋转移动元素(左移): deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
8、count(param):
统计队列中元素的个数。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def count(self, value):
"""
count():统计队列中元素的个数
"""
return self.items.count(value)
if __name__ == "__main__":
q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("原始queue:",q.items)
# 统计队列中元素的个数
count = q.count(6)
print("count()统计队列中元素的个数:", count)
# 运行结果:
# 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# count()统计队列中元素的个数: 1
9、reverse():
反转队列。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def reverse(self):
"""
reverse():反转队列
:return:
"""
return self.items.reverse()
if __name__ == "__main__":
q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("原始queue:",q.items)
# 反转队列
q.reverse()
print("reverse()反转队列:", q.items)
# 运行结果:
# 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# reverse()反转队列: deque([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
10、deque(maxlen=N):
deque(maxlen=N)构造函数会新建一个固定大小的队列。
当新的元素加入并且这个队列已满的时候,最老的元素会被自动移除掉。
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def maxlen(self, value):
"""
deque(maxlen=N)构造函数会新建一个固定大小的队列。
当新的元素加入并且这个队列已满的时候,最老的元素会被自动移除掉。
"""
return deque(self.items, maxlen=value)
if __name__ == "__main__":
q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("原始queue:",q.items)
# 新建一个固定大小的队列
new_queue = q.maxlen(5)
print("新建一个固定大小的队列:", new_queue)
new_queue.append(100)
print("往固定大小的队列中添加新元素:", new_queue)
# 运行结果:
# 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 新建一个固定大小的队列: deque([6, 7, 8, 9, 10], maxlen=5)
# 往固定大小的队列中添加新元素: deque([7, 8, 9, 10, 100], maxlen=5)
11、判断一个队列是否是空队列:
# 实现队列,使用deque
from collections import deque
class Queue():
def __init__(self, value):
self.items = deque(value)
def empty(self):
"""
判断队列是否为空队列
"""
return len(self.items) == 0
if __name__ == "__main__":
q = Queue([])
print("原始queue:", q.items)
# 判断一个队列是否是空队列
result = q.empty()
print("是否为空队列:", result)
# 运行结果:
# 原始queue: deque([])
# 是否为空队列: True