zoukankan      html  css  js  c++  java
  • 数据结构与算法(8)——双端队列Dueue

    • 双端队列基础定义

    种有次序的数据集合,与队列相似,但具有两端,称为首端和尾端,但deque数据既可以从队首加入,也可以从队尾加入,数据项也可以从两端移除。(它集成了栈和队列的能力)

    • 双端队列抽象数据类型
    Deque() 创建一个双端队列
    addFront(item) 将item加入队首
    addRear(item) 将item加入队尾
    removeFront() 从队首移除数据项,返回值为所移除的项
    removeRear() 从队尾移除数据项,返回值为所移除的项
    isEmpty() 返回是否为空
    size() 返回deque中包含的数据项的个数

    python自己建立的Deque:

     1 class Deque:
     2     def __init__(self):
     3         self.items = []
     4     def isEmpty(self):
     5         return self.items == []
     6     def addFront(self,item):
     7         self.items.append(item)
     8     def addRear(self,item):
     9         self.items.insert(0,item)
    10     def removeFront(self):
    11         return self.items.pop() #时间复杂度O(1)
    12     def removeRear(self):
    13         return self.items.pop(0) #时间复杂度O(n)
    14     def size(self):
    15         return len(self.items)
    • 双端队列的应用
    1. 回文词判断

    回文词:如‘abcdedcba’这样左右对称的字符串。

    思路:首先将所需判断的词加入deque,再分别从两端同时移除字符判定是否相同,直到deque中剩下0个或者1个字符。

    代码:

     1 from deque import Deque
     2 
     3 def palchecker(aString):
     4     '''
     5     :param aString: 待判断的字符
     6     :return: bool类型
     7     '''
     8     chardeque = Deque()
     9 
    10     for ch in aString:
    11         chardeque.addRear(ch)
    12     stillEqual = True
    13 
    14     while chardeque.size() > 1 and stillEqual:
    15         first = chardeque.removeFront()
    16         last = chardeque.removeRear()
    17         if first != last:
    18             stillEqual = False
    19     return stillEqual
    20 print(palchecker('abcdedcba'))
    21 print(palchecker('anshsoba'))
    [out]
    True
    False
    
    Process finished with exit code 0

    参考:https://www.bilibili.com/video/BV1QJ411w7bB?p=26

  • 相关阅读:
    #2019090700004
    51nod 1191-贪心+并查集
    hdu 5015-矩阵快速幂
    树形DP—依赖背包模板
    HDU 1074—压缩DP
    动态绑定的开销
    动态绑定
    静态绑定(前期绑定)
    继承的一些优点
    多态置换原则初始化基类对象
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/12602630.html
Copyright © 2011-2022 走看看