基于python的数据结构之【双端队列】

python里边有的

append,appendleft,clear,count,extend,extendleft,pop,popleft,remove…

最基础有:[append, appendleft, pop, popleft] 希望是O(1)的时间复杂度

而在过去的内容中有循环双端队列是可以实现的,在这里就将其继承,然后实现以上功能就好了。
都比较简单。

# -*- coding:utf-8 -*-
# Author:        Greed_Vic(PL Z)
# Product_name:  PyCharm
# File_name:     Deque 
# @Time:         13:45  2021/6/9

from CircularDoubleLinkedList import *


class DeQue(object):
    def __init__(self, maxsize):
        self.maxsize = maxsize
        self.deq = CircularDoubleLinkedList()

    def append(self, val):
        self.deq.append(val)

    def appendleft(self, val):
        self.deq.appendleft(val)

    def poptail(self):
        val = self.deq.tailnode().val
        self.deq.remove(self.deq.tailnode())
        return val

    def pophead(self):
        val = self.deq.headnode().val
        self.deq.remove(self.deq.headnode())
        return val


if __name__ == '__main__':
    def test():
        dq = DeQue(12)

        for i in range(10):
            dq.append(i)
        assert [i for i in dq.deq] == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        for i in range(1, 4):
            dq.appendleft(i * 10)

        assert [i for i in dq.deq] == [30, 20, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        assert 30 == dq.pophead()
        assert 9 == dq.poptail()

        print("Test Done")
    test()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值