【python 双端队列】双端队列python操作

双端队列,是一种具有队列和栈的性质的数据结构

双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队

双端队列的实现
操作:

  • Deque()创建一个空的双端队列
  • add_front(item)从队头加入一个item元素
  • add_rear(item)从队尾加入一个item元素
  • remove_front()从队头删除一个item元素
  • remove_rear()从队尾删除一个item元素
  • is_empty()判断双端是否为空
  • size()返回队列大小
# -*- coding:utf-8 -*-

class Deque(object):
    """双端队列"""
    def __init__(self):
        self.__list = []

    def add_front(self, item):
        """往队列头部添加一个item元素"""
        self.__list.insert(0, item)

    def add_rear(self, item):
        """往队列尾部添加一个item元素"""
        self.__list.append(item)

    def pop_front(self):
        """从队列头部删除一个元素"""
        return self.__list.pop(0)

    def pop_rear(self):
        """从队列尾部删除一个元素"""
        return self.__list.pop()

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列大小"""
        return len(self.__list)


# 先进先出
deque=Deque()
for i in range(0,10):
    deque.add_rear(i)

print(deque.size())

for j in range(0,20):
    kk=deque.pop_front()
    print(kk)
    if deque.is_empty()==True:
        break



print(deque.size())

print(deque.is_empty())


运行结果:

10
0
1
2
3
4
5
6
7
8
9
0
True

Process finished with exit code 0

Python collections 模块也实现了双端队列。
collections.deque 类(双向队列)是一个线程安全、可以快速从两端添加或者删除元素的数据类型。而且如果想要有一种数据类型来存放“最近用到的几个元素”,deque 也是一个很好的选择。这是因为在新建一个双向队列的时候,你可以指定这个队列的大小,如果这个队列满员了,还可以从反向端删除过期的元素,然后在尾端添加新的元素。

maxlen 是一个可选参数,代表这个队列可以容纳的元素的数量,而且一旦设定,这个属性就不能修改了。
队列的旋转操作 ( rotate ) 接受一个参数 n,当 n > 0 时,队列的最右边的 n 个元素会被移动到队列的左边。当 n < 0 时,最左边的 n 个元素会被移动到右边。

当试图对一个已满(len(d) == d.maxlen)的队列做尾部添加操作的时候,它头部的元素会被删除掉。
extendleft(iter) 方法会把迭代器里的元素逐个添加到双向队列的左边,因此迭代器里的元素会逆序出现在队列里。


from collections import deque

# 创建一个双端队列
q = deque()
# 入队
for each in range(0,10):
    q.append(each)


print(q)

# 出队
for i in range(0,3):

    # 右边出
    k1=q.pop()
    print(k1)
    # 左边出
    k2=q.popleft()
    print(k2)

print(q)




dq = deque(range(10), maxlen=10)
print(dq)

dq.rotate(3)
print(dq)

dq.rotate(-4)
print(dq)

dq.appendleft(-1)
print(dq)

dq.extend([11, 22, 33])

print(dq)
dq.extendleft([10, 20, 30, 40])

print(dq)

运行结果:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
9
0
8
1
7
2
deque([3, 4, 5, 6])
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10)
deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)

Process finished with exit code 0
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页