美文网首页
2018-07-09队列和双端队列的实现

2018-07-09队列和双端队列的实现

作者: 菩灵 | 来源:发表于2018-07-09 16:40 被阅读0次

取的一端称为队头,添加的一端称为队尾。
用顺序表的话,头部插入/弹出,时间复杂度为O(n),尾部插入/弹出,时间复杂度为O(1)
选用头部尾部的时候要看,哪一端用得多
代码实现:

# coding:utf-8

class Queue(object):
    """队列"""

    def __init__(self):
        """构造函数"""
        self.__list = []

    def enqueue(self, item):
        """往队列中添加一个item元素"""
        self.__list.append(item)
        # self.__list.insert(0, item)

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

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []
    def size(self):
        """返回队列的大小"""
        return len(self.__list)

if __name__ == "__main__":
    q = Queue()
    q.enqueue(1)
    q.enqueue(2)
    q.enqueue(3)
    q.enqueue(4)

    print(q.dequeue())
    print(q.dequeue())
    print(q.dequeue())
    print(q.dequeue())

结果实现:


结果

双端队列

双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。

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

双端队列

双端队列的头,和列表中的图没有固定的对应关系

代码实现:

# coding:utf-8

class Deque(object):
    """队列"""

    def __init__(self):
        """构造函数"""
        self.__list = []

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

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


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

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

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

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


if __name__ == "__main__":
    deque = Deque()
    deque.add_front(1)
    deque.add_front(2)
    deque.add_rear(3)
    deque.add_rear(4)
    print(deque.size())
    print(deque.remove_front())
    print(deque.remove_front())
    print(deque.remove_rear())
    print(deque.remove_rear())

实现结果:


实现结果

相关文章

  • 7.双端队列Deque

    目录:1.双端队列的定义2.双端队列的图解3.双端队列定义操作4.双端队列的实现 1.双端队列的定义 2.双端队列...

  • 数据结构与算法之队列(五)

    目录 队列简介队列的接口设计用栈实现队列双端队列实现循环队列实现循环双端队列 一 简介 队列是一种特殊的线性表,只...

  • ARTS第八周20200712

    Algorithm 设计循环双端队列 设计实现双端队列。 你的实现需要支持以下操作:MyCircularDeque...

  • 数据结构之双端队列

    双端队列的特性 大致思路是两端都可以进出队列 Deque的实现API 注意的地方 是双端队列的头部的进队和出队,因...

  • LeetCode - 641. 设计循环双端队列 swift &

    设计实现双端队列。你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。...

  • LinkedList集合源码分析(2)

    (1)LinkedList 实现了无序、可重复的List接口,并且还实现了Deque(双端队列)和Queue(队列...

  • 死磕 java集合之ArrayDeque源码分析

    问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安...

  • 双端队列

    双端队列 双端队列是与队列类似的项的有序集合。双端队列有两个端部,首部和尾部,并且项在集合中保持不变。双端队不同的...

  • 队列--设计循环双端队列

    设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。i...

  • Deque 接口

    双端队列,支持在两端插入和删除元素的线性集合,因为它同时实现了堆栈和队列(Stack and Queue ),是比...

网友评论

      本文标题:2018-07-09队列和双端队列的实现

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