【数据结构与算法Python版学习笔记】基本数据结构——双端队列 Deque

定义

  • 双端队列(deque 或 double-ended queue)与队列类似,也是一系列元素的有序组合。其两端称为队首(front)和队尾(rear),元素在到达两端之前始终位于双端队列中。

  • 元素可以从两端插入,也可以从两端删除。

  • 数据项不满足严格的“后进先出”或“先进先出”顺序,需自行维护

抽象数据类型Deque

  • Deque()创建一个空双端队列,无参数,返回值为 Deque 对象。

  • addFront(item) 在队首插入一个元素,参数为待插入元素,无返回值。O(1)

  • addRear(item) 在队尾插入一个元素,参数为待插入元素,无返回值。O(n)

  • removeFront() 在队首移除一个元素,无参数,返回值为该元素。双端队列会被改变。O(1)

  • removeRear() 在队尾移除一个元素,无参数,返回值为该元素。双端队列会被改变。O(n)

  • isEmpty() 判断双端队列是否为空,无参数,返回布尔值。

  • size() 返回双端队列中数据项的个数,无参数,返回值为整型数值。

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 palchecher(aString):
    chardeque = Deque()
    for ch in aString:
        chardeque.addFront(ch)

    stillEqual = True

    while chardeque.size() > 1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False

    return stillEqual

if __name__ == "__main__":
    print(palchecher("lsdkjskf"))
    print(palchecher("radar"))
posted @ 2021-04-22 13:13  砥才人  阅读(134)  评论(0编辑  收藏  举报