1.双端队列的概念

双端队列也是一种有次序的数据集,但其数据项的加入或移除可以从发生在队尾也可发生在队首。

这种特性意味着它既具有栈的特性也能充当队列使用。

2.双端队列的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)

3.双端队列的应用

(1)回文词的判断

问题描述:判断单词是否是回文词

思路:同时从两端取出回文词的字母进行判断,回文词加入双端队列的过程从一端进行(注意加入两端队列或者去除数据项中至少有一步是在同端进行的)。

def palchecker(aString):
    # 回文词的判断
    chardeque = Deque()
    for i in aString:
        chardeque.addFront(i)  # 将单词的所有字母都从首端添加到双端列表中
    still_equal = True  # 首尾字母的判断结果,默认为正确
    while chardeque.size()>1 and still_equal:
        first = chardeque.removeFront()
        second = chardeque.removeRear()
        if first != second:
            still_equal = False
    return still_equal
palchecker('aba')  # True
palchecker('madam')  # True
palchecker('aaba')  # False

更多推荐