双端队列Deque及Python实现

双端队列Deque

与队列类似,双端队列有两个人口,不同之处在于双端队列的两个口都既可以是入口也可以是出口,但数据项只能从两端进出。
所以 栈Stack 中次序遵守 ‘后进先出’ 原则。

双端队列Deque的Python实现

双端队列数据类型的定义如下:

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)			#返回队列里数据项的个数

注意:双端队列的首尾方向可以根据自己的需求去定义。

举个操作的例子:

命令语句栈里的内容返回值
d=Deque()[]
d.isEmpty[]True
d.addRear(1)[1]
d.addRear(‘a’)[ ‘a’,1]
d.addFront(‘bb’)[1, ‘a’,‘bb’]
d.addFront(55)[1, ‘a’,‘bb’,55]
d.size[1, ‘a’,‘bb’,55]4
d.removerRear[ ‘a’,‘bb’,55][1]
d.removerFront[‘a’,‘bb’][55]
d.isEmpty[‘a’,‘bb’]False

双端队列Deque的应用:“回文词”判断

判断一个词是否是回文词:
如:toot, pop, dad 等就是回文词

用双端队列很容易解决“回文词”问题
先将需要判定的词从队尾加入deque
再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符

在这里插入图片描述
程序如下:

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)
#以上定义双端队列对象

def HWC_checker(Str1):
    mydeque = Deque()		#新建空双端队列

    for i in Str1:
        mydeque.addRear(i)		#将每个字符加入到队列里

    while mydeque.size() > 1:	#如果队列里有一个以上的元素则执行下面的程序
        if mydeque.removeFront() == mydeque.removeRear(): 
            pass	
        else:
            return False		#判断首位字符是否相等,如果不相等则返回False

    return True		#最后队列里还剩一个或者零个数据,则返回True

print(HWC_checker(input()))







学习陈斌老师的数据结构与算法Python版课有感

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值