Python 数据结构与算法——deque(双端队列)

来源:互联网 发布:安徽省大数据产业协会 编辑:程序博客网 时间:2024/06/06 07:23

Python 中的 list 类型(使用其内部的 append:尾部进,和 pop 成员函数:尾部出,左端受限)能胜任 stack 的角色,但其在前端的 pop(或 insert)的操作时间都是线性级的。

而在 BFS(广度优先)这类算法中(尾部进,头部出),我们就需要一种双端队列(double-ended queue,deque)。这种队列通常都是用链表(其前后端的追加及 pop 都属于常数级操作)

Python 本身在其标准库的 collections 模块中就提供了 deque 类。

from collections import deque

该类在右端:

  • (1)append
  • (2)extend
  • (3)pop

左端:

  • (1)appendleft
  • (2)extendleft
  • (3)popleft

在内部,deque 类的实现是一个块空间的双向链表,其中每个独立元素都是一个数组。尽管它与纯独立元素组成的链表近乎等效,但这样做能降低开销并且再实践中更为有效。例如,如果它是一个普通的列表,我们通过表达式 d[k] 就能访问到 d 队列中的第 k 个元素。同理,如果 deque 对象中的每个快空间中都有 b 个元素,那么我们就只需要遍历第 k/b 块空间就够了。

0 0
原创粉丝点击