数据结构与算法(python) 线性结构:双端队列Deque

参考自 MOOC数据结构与算法Python版

一、什么是双端队列Deque

  • 跟队列相似,其两端可以称作“首”“尾”端,但deque中数据项既可以从队首加入,也可以从队尾加入;数据项也可以从两端移除。某种意义上说,双端队列集成了栈和队列的能力。

在这里插入图片描述

二、抽象数据类型Deque

2.1 Deque的基本操作
函数含义
Deque()创建一个空双端队列
addFront(item)将item加入队首
addRear(item)将item加入队尾
removeFront()从队首移除数据项,返回值为移除的数据项
removeRear()从队尾移除数据项,返回值为移除的数据项
isEmpty()返回deque是否为空
size()返回deque中包含数据项的个数
2.2 Python实现ADT Queue
  • 采用List实现
    – List下标0作为deque的尾端
    – List下标-1作为deque的首端
  • 操作复杂度
    – addFront/removeFront O(1)
    – addRear/removeRear O(n)
class Deque:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def addFront(self,item):
        self.items.append(item)
    def addRear(self, item):
        self.items.insert(0,item)
    def removeFront(self):
        return self.items.pop()
    def removeRear(self):
        return self.items.pop(0)
    def size(self):
        return len(self.items)

三、双端队列的应用

3.1 回文词的判定

“回文词”指正读和反读都一样的词

算法流程

  • 先将需要判定的词从队尾加入deque
  • 再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符
#from pythonds.basic.deque import Deque
def palchecker(aString):
    chardeque = Deque()
    for ch in aString:
        chardeque.addRear(ch)
    stillEqual = True
    while chardeque.size()>1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False
    return stillEqual
print(palchecker("abcdefedcba"))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值