美文网首页
数据结构 03 双向队列

数据结构 03 双向队列

作者: 极光火狐狸 | 来源:发表于2017-10-13 19:22 被阅读61次

双向队列

它是一种混合线性数据结构, 涵盖Stack和Queue的全部能力.

# -.- coding:utf-8 -.-
from __future__ import print_function


def checker(func):

    def wrapper(self, *args, **kwargs):
        if self.empty():
            return self.items
        return func(self, *args, **kwargs)

    return wrapper


class Deque(object):

    """
    Deuque: 双向队列

    它是一种混合线性数据结构, 涵盖Stack和Queue的全部能力.
    """

    def __init__(self):
        self.items = []

    def size(self):
        """获取栈元素总数."""
        return len(self.items)

    def empty(self):
        """栈为空则返回: True ; 栈非空返回: False"""
        return not self.size()

    def append(self, item):
        self.items.append(item)
        return self.items

    def insert(self, item):
        self.items.insert(0, item)
        return self.items

    @checker
    def __leftpop(self):
        return self.items.pop(0)

    @checker
    def __rightpop(self):
        return self.items.pop(-1)

    def get(self):
        return self.__leftpop()

    def rightget(self):
        return self.__rightpop()

    @checker
    def peek(self):
        return self.items[0]

    @checker
    def rightpeek(self):
        return self.items[-1]

    def __iter__(self):
        return self

    def __next__(self):
        if not self.empty():
            return self.get()
        raise StopIteration

    def next(self):
        return self.__next__()

    def __str__(self):
        return "{}".format(self.items)


if __name__ == '__main__':
    deque = Deque()

    # 插入测试数据
    deque.append("a")
    deque.append("b")
    deque.append("c")
    deque.insert("x")
    deque.insert("y")
    deque.insert("z")

    # 测试功能
    print("查看双向队列: ", deque)
    print("获取头元素(不移除元素): ", deque.peek())
    print("查看双向队列: ", deque)
    print("获取头元素(移除元素): ", deque.get())
    print("查看双向队列: ", deque)
    print("获取尾元素(不移除元素): ", deque.rightpeek())
    print("查看双向队列: ", deque)
    print("获取尾元素(移除元素): ", deque.rightget())
    print("查看双向队列: ", deque)

    # 遍历栈对象
    for enum, i in enumerate(deque):
        print("遍历第{}个元素: ".format(enum), i)

    # 输出结果
    # 查看双向队列:  ['z', 'y', 'x', 'a', 'b', 'c']
    # 获取头元素(不移除元素):  z
    # 查看双向队列:  ['z', 'y', 'x', 'a', 'b', 'c']
    # 获取头元素(移除元素):  z
    # 查看双向队列:  ['y', 'x', 'a', 'b', 'c']
    # 获取尾元素(不移除元素):  c
    # 查看双向队列:  ['y', 'x', 'a', 'b', 'c']
    # 获取尾元素(移除元素):  c
    # 查看双向队列:  ['y', 'x', 'a', 'b']
    # 遍历第0个元素:  y
    # 遍历第1个元素:  x
    # 遍历第2个元素:  a
    # 遍历第3个元素:  b

相关文章

  • 数据结构 03 双向队列

    双向队列 它是一种混合线性数据结构, 涵盖Stack和Queue的全部能力.

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • 8. Python3 中的数据结构

    Python更多的数据结构 集合(set) 堆(heap) 双向队列(double-ended queue) 在P...

  • 慕课网高并发实战(七)- J.U.C之AQS

    课程网址 项目地址 简介 数据结构 底层是双向链表,队列的一种实现 sync queue:同步队列,head节点主...

  • 数据结构

    数据结构 队列&栈&链表&集合&hash表&树&图 队列 先进先出 栈 先进后出 链表 单向链表 双向链表 循环链...

  • Android LinkedBlockingDeque 双向阻塞

    前言 最近并发编程用到就简单做下笔记 何为双向阻塞队列 队列 一种常见的先进先出,后进后出的数据结构 阻塞队列...

  • 学习JavaScript数据结构与算法(第2版)

    二维和多维数组 栈数据结构 队列数据结构(排队) 链表数据结构 双向链表 集合 字典和散列表 散列表 树 二叉树 ...

  • 数据结构基础2

    1.单链表的数据结构+案例2.双链表的数据结构+案例3.栈的数据结构(双向链表+数组实现) + 案例4.队列的数据...

网友评论

      本文标题:数据结构 03 双向队列

      本文链接:https://www.haomeiwen.com/subject/pdhtuxtx.html