双端队列deque的应用

Posted jeffrey-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双端队列deque的应用相关的知识,希望对你有一定的参考价值。

collections模块作为基础数据类型的一种扩展,提供了更为丰富的数据结构支持。和list相比,双端队列deque在数组的首部和尾部进行增加和删除元素的时间复杂度都为O(1)。而list在数组尾部进行操作的时间复杂度为O(1),在首部进行增加删除数据的时间复杂度为O(n)(涉及到整个数组元素的移动)。
Deques支持线程安全,内存有效的在队列两端进行删除增加元素操作,在任一方向上具有大致相同的O(1)性能。
类原型:collections.deque([iterable[, maxlen]]),若maxlen未设定或为None,则deque实例的长度可以扩展到任意长度。若指定了具体长度,当新元素从一端加入,且超出maxlen时,另一段的元素会弹出,以确保maxlen的固定值。
deque常用于保持固定长度的操作队列,如下所示:

from collections import deque

def search(lines, pattern, history=5):
    previous_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line, previous_lines
        previous_lines.append(line)

# Example use on a file
if __name__ == '__main__':
    with open('somefile.txt') as f:
        for line, prevlines in search(f, 'python', 5):
            for pline in prevlines:
                print(pline, end='')
            print(line, end='')
            print('-'*20)

以上是关于双端队列deque的应用的主要内容,如果未能解决你的问题,请参考以下文章

6.基本数据结构-双端队列(Deque)

Java Deque接口 使用方法(栈队列双端队列)

双端队列

6.基本数据结构-双端队列(Deque)

6.基本数据结构-双端队列(Deque)

C++ STL 双端队列deque详解