何为双端队列(Deque)
双端队列是一种有次序的数据集,数据项可以从队首加入,也可以从队尾加入,同时数据移除也可以从两端移除。
注:双端队列不具有先进先出或者先进后出特性。
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) #返回队列里数据项的个数
注:双端队列的首尾方向可以根据自己的需求去定义
“回文词”判断
定义:正读和反读都是一样的词,如radar,madam,toot等
求解思路:用双端队列很容易解决“回文词”问题
(1)先将需要判定的词从队尾加入deque。
(2)再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符。
python程序实现
def palchecker (astring): ##定义回文词判定函数
chardeque=Deque()
for ch in astring:
chardeque.addRear(ch)
stillEqual=True
while chardeque.size() > 1 and stillEqual:
first=chardeque.removeFront()
second=chardeque.removeRear()
if first != second :
stillEqual=False
return stillEqual
测试结果:
print(palchecker("radar"))
print(palchecker("ladfdfdab"))
True
False