双端队列

摘自:https://www.jianshu.com/p/1f1520db325d

双端队列是与队列类似的项的有序集合。

双端队列有两个端部,首部和尾部,并且项在集合中保持不变。
双端队不同的地方是添加和删除项是非限制性的。可以在前面或后面添加新项;同样,可以从任一端移除现有项。

双端队列抽象数据类型

如上所述,deque 被构造为项的有序集合,其中项从首部或尾部的任一端添加和移除。
下面给出了 deque 操作。

操作描述返回值
Deque() 创建一个空的新 deque,不需要参数 返回空的 deque
addFront(item) 将一个新项添加到 deque 的首部,需要 item 参数 不返回任何内容
addRear(item) 将一个新项添加到 deque 的尾部,需要 item 参数 不返回任何内容
removeFront() 从 deque 中删除首项,deque 被修改 返回删除项 item
removeRear() 从 deque 中删除尾项,deque 被修改 返回删除项 item
isEmpty() 测试 deque 是否为空,不需要参数 返回布尔值
size() 返回 deque 中的项数,它不需要参数 返回一个整数

python实现双端队列

复制代码
class Deque(object):
    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)

if __name__ == '__main__':
    deq = Deque()
复制代码

 

双端队列的应用

使用 deque 数据结构可以容易地解决经典回文问题。回文是一个字符串,读取首尾相同的字符,例如,radar toot madam。 我们想构造一个算法输入一个字符串,并检查它是否是一个回文。
解决方案:

  • 将字符串添加到双端队列中
  • 直接删除并比较收尾字符串,如果可以持续匹配首尾字符,我们最终要么用完字符,要么留出大小为 1 的deque,取决于原始字符串的长度是偶数还是奇数。


    回文检查:
    复制代码
    #回文检查
    def palchecker(aString):
        #创建一个双端队列,将字符串中的字符依次添加到双端队列中
        charqueue = Deque()
    
        for char in aString:
            charqueue.addRear(char)
    
        stillEqual = True
    
        #当至少有一个字符并且满足收尾相等则循环
        while charqueue.size() > 1 and stillEqual:
            first = charqueue.removeFront()
            last = charqueue.removeRear()
            if first != last:
                stillEqual = False
        return stillEqual
    
    
    print(palchecker("lsdkjfskf"))
    print(palchecker("radar"))
    复制代码

     

    posted @   LiuYanYGZ  阅读(7825)  评论(1编辑  收藏  举报
    编辑推荐:
    · 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示