美文网首页
双端队列

双端队列

作者: 疯了个魔 | 来源:发表于2019-01-03 22:23 被阅读0次

双端队列

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

双端队列

双端队列抽象数据类型

如上所述,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:
    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)

双端队列的应用

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

  1. 将字符串添加到双端队列中
  2. 直接删除并比较收尾字符串,如果可以持续匹配首尾字符,我们最终要么用完字符,要么留出大小为 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"))

相关文章

  • 7.双端队列Deque

    目录:1.双端队列的定义2.双端队列的图解3.双端队列定义操作4.双端队列的实现 1.双端队列的定义 2.双端队列...

  • 双端队列

    双端队列 双端队列是与队列类似的项的有序集合。双端队列有两个端部,首部和尾部,并且项在集合中保持不变。双端队不同的...

  • 数据结构-队列(Queue)-FIFO

    数据结构-队列(Queue)-FIFO 队列的接口设计 双端队列-Deque 循环队列-CircleQueue 双...

  • 数据结构与算法之队列(五)

    目录 队列简介队列的接口设计用栈实现队列双端队列实现循环队列实现循环双端队列 一 简介 队列是一种特殊的线性表,只...

  • 队列 - 双端队列 - 循环队列 - 循环双端队列

    队列是一种特殊的线性表,只能在头尾两端进行操作队尾(rear):只能从队尾添加元素,一般叫做 enQueue,入队...

  • 数据结构之「双端队列」

    什么是双端队列? 双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double...

  • 数据结构(四) -- 双端队列

    一,双端队列 队列的一种变型--双端队列(Double-ended queue),简称为Deque。顾名思义,也就...

  • ARTS第八周20200712

    Algorithm 设计循环双端队列 设计实现双端队列。 你的实现需要支持以下操作:MyCircularDeque...

  • java基础之队列

    双端队列Deque 双端队列, 先看下整体结构 如图, 主要是addFirst 和 addLast方法, 有很多类...

  • 死磕 java集合之ArrayDeque源码分析

    问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安...

网友评论

      本文标题:双端队列

      本文链接:https://www.haomeiwen.com/subject/xthcrqtx.html