python-队列queue-双端队列deque

队列定义

队列时有序集合,添加操作发生在“尾部”,移除操作发生在“头部”。这种排序原则称为FIFO(first-in first-out),即先进先出。(在日常生活中,我们去超市买东西排队,这便是最简单的队列的例子。)

队列-queue-python

from queue import *
q = Queue() # 定义一个队列
q.empty() # 判断队列是否为空
n = 5
for i in range(n):
    q.put(i) # 从队尾插入元素,将元素0, 1, 2, 3, 4放到队列q中
print(q.qsize()) # q.qsize()返回队列大小
# 5
print(q.empty())
# False
for i in range(n):
    m = q.get() # 从队头删除元素并返回
    print(m, end = ' ') # 将元素从队列中取出, 遵循队列先进先出的原则
    # 0, 1, 2, 3, 4
print(q.qsize())
# 0
print(q.empty())
# True

双端队列-deque-python

双端队列是与队列类似的有序集合。它有一前、一后两端,元素在其中保持自己的位置。双端队列在哪一端添加和移除元素没有任何限制。新元素既可以被添加到前端,也可以被添加到后端。同样地,已有的元素也可以从任意一端移除。某种意义上,双端队列是栈和队列的结合。

双端队列-collections-deque

from collections import deque
d = deque('abc') # 创建一个有三个元素的双端队列
d # 查看队列d中的元素
# deque(['a', 'b', 'c'])
for val in d: # 遍历队列d中的元素
    print(val.upper())
# A
# B
# C


d.append('d') # 在队列d的右边添加一个新的元素
d.appendleft('e') # 在队列d的左边添加一个新的元素
d # 查看队列d中的元素
# deque(['e', 'a', 'b', 'c', 'd'])


d.pop() # 返回并移除队列d中最右边的元素
# 'd'
d.popleft() # 返回并移除队列d中最左边的元素
# 'e'
list(d) # 以列表形式返回队列d中的元素
# ['a', 'b', 'c']
d[0] # 返回队列d中最左边的元素
# 'a'
d[-1] # 返回队列d中最右边的元素
# 'c'


list(reversed(d)) # 翻转队列中的元素并以列表形式返回
# ['c', 'b', 'a']
d.extend('fjhi') # 在队列d的最右边添加多个元素
d.extendleft('xyz') # 在队列d的最右边添加多个元素
d # 查看队列d中的元素
# deque(['z', 'y', 'x', 'a', 'b', 'c', 'f', 'j', 'h', 'i'])


d.rotate(1) # 将队列中的元素整体向后移一位,原最后一个元素放到队首
d # 查看队列d中的元素
# deque(['i', 'z', 'y', 'x', 'a', 'b', 'c', 'f', 'j', 'h'])
d.rotate(-1)# 将队列中的元素整体向前移一位,队首的元素放到队尾
d # 查看队列d中的元素
# deque(['z', 'y', 'x', 'a', 'b', 'c', 'f', 'j', 'h', 'i'])


deque(reversed(d)) # 翻转队列d,返回一个新的队列
# deque(['i', 'h', 'j', 'f', 'c', 'b', 'a', 'x', 'y', 'z'])
d.clear() # 清空队列
d.extendleft('abc') # extendleft()翻转输入的元素
d # 查看队列d中的元素
# deque(['c', 'b', 'a'])
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值