首页 > 编程语言 >数据结构预算法学习笔记 —— 双端队列(Deque)

数据结构预算法学习笔记 —— 双端队列(Deque)

时间:2022-09-05 00:55:24浏览次数:82  
标签:Deque return 预算法 队列 双端 self item items

双端队列(Deque)

1.简介

双端队列是一种有次序的数据集。

和队列相似,其两端也可以称作为”首“”尾“段,但deque中数据项既可以从队首加入,也可以从队尾加入。同样,数据项也可以从双端队列的两端移除。

某种意义上, 双端队列集合了栈和队列的特点

 

因此,双端队列并不具有内在的LIFO或者FIFO特性,如果使用双端队列来模拟栈或队列,则需要由使用者自行维护操作的一致性

 

Deque的python实现

class Deque: # index=0 is rear, index=-1 is head
    def __init__(self):
        self.items = []
        
    def addFront(self,item): # add item to the head
        self.items.append(item)
        
    def addRear(self,item): # add item to the rear
        self.items.insert(0, item)
        
    def removeFront(self): # remove the head item and return it
        return self.items.pop()
    
    def removeRear(self): # remove the rear item and return it
        return self.items.pop(0)
    
    def isEmpty(self): 
        return self.items == []
    it
    def size(self): # return the number of items
        return len(self.items)

 

2. Deque的应用

2.1回文判定

回文词即正读反读都一样的词,如:radar,madan,toot

判断词是否为回文词,可以先将需要判断的词加入到deque,再从两端同时判定字符是否相同。若结果为是,则删除直到字符串只剩下0或一个词

def palChecker(aString):
    checker = Deque()

    for item in aString:
        checker. addRear(item)
    while checker.size()> 1:
        headitem = checker.removeFront()
        rearitem = checker.removeRear()
        if headitem != rearitem: return False
return True

 

标签:Deque,return,预算法,队列,双端,self,item,items
From: https://www.cnblogs.com/wujiadeqiao/p/16656587.html

相关文章

  • 32 | JAVA集合Deque(一种接口,比Queue更丰富的接口,底层实现可为LinkedList)
    Deque如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(DoubleEndedQueue),学名Deque。Java集合提供了接口Deque来实现一个双端队列,它的功能是:既可以添加到队......
  • 共享栈和双端队列
    一、算法设计思想1.ABCD顺序入栈,任意时刻出栈,共多少种排列(Catalan数:(1/n+1)·C2nn)       一定不存在这种情况:i<j<k,Str[i]>Str[k]>Str[j]。只需要在全排列的基......
  • 9.Java的LinkedList/Deque相关方法
    Java的LinkedList/Deque中add/offer/push,remove/pop/poll的区别它们来自不同的接口add/remove源自集合,所以添加到队尾,从队头删除;offer/poll源自队列(先进先出=>尾进......
  • 641. 设计循环双端队列
    原题链接https://leetcode.cn/problems/design-circular-deque/题目设计实现双端队列。实现MyCircularDeque类:MyCircularDeque(intk):构造函数,双端队列最大为k......
  • 双端队列简单实现
    设计循环双端队列classMyCircularDeque{privateint[]elements;privateintrear,front;privateintcapacity;publicMyCircularDeque(intk......