数据结构----双端队列Dque

双端队列的概念与数据结构

  deque(也称为双端队列)是与队列类似的项的有序集合。它有两个端部,首部和尾部,并且项在集合中保持不变。

  deque 特殊之处在于添加和删除项是非限制性的。可以在前面或后面添加新项。同样,可以从任一端移除现有项。在某种意义上,这种混合线性结构提供了单个数据结构中的栈和队列的所有能力。  

Deque的抽象数据类型定义:Deque的抽象数据类型应该由以下结构和操作定义。其中元素可以从首部或尾部的任一端添加和移除。Deque操作如下
  • Dque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
  • lpush(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
  • rpush(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
  • lpop() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
  • rpop() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
  • isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
  • size() 返回 deque 中的项数。它不需要参数,并返回一个整数。  

双端队列的定义  

  

 1 class Deque(object):
 2     def __init__(self):
 3         self.deque = []
 4 
 5     def __str__(self):
 6         return str(self.deque)
 7 
 8     def rpush(self, item):
 9         self.deque.append(item)
10 
11     def lpush(self, item):
12         self.deque.insert(0, item)
13 
14     def rpop(self):
15         return self.deque.pop() if self.deque else "Dequeue is empty!"
16 
17     def lpop(self):
18         return self.deque.pop(0) if self.deque else "Dequeue is empty!"
19 
20     def isEmpty(self):
21         return self.deque == []
22 
23     def size(self):
24         return len(self.deque)

Deque的应用案例-回文检查

回文检测:设计程序,检测一个字符串是否为回文。

- 回文:回文是一个字符串,读取首尾相同的字符,例如,radar toot madam

- 分析:该问题的解决方案将使用 deque 来存储字符串的字符。我们从左到右处理字符串,并将每个字符添加到 deque 的尾部。在这一点上,deque 像一个普通的队列。然而,我们现在可以利用 deque 的双重功能。 deque 的首部保存字符串的第一个字符,deque 的尾部保存最后一个字符。我们可以直接删除并比较首尾字符,只有当它们匹配时才继续。如果可以持续匹配首尾字符,我们最终要么用完字符,要么留出大小为 1 的deque,取决于原始字符串的长度是偶数还是奇数。在任一情况下,字符串都是回文。

 1 from basic.deque import Deque
 2 
 3 def palchecker(aString):
 4     chardeque = Deque()
 5 
 6     for ch in aString:
 7         chardeque.addRear(ch)
 8 
 9     stillEqual = True
10 
11     while chardeque.size() > 1 and stillEqual:
12         first = chardeque.removeFront()
13         last = chardeque.removeRear()
14         if first != last:
15             stillEqual = False
16 
17     return stillEqual
18 
19 print(palchecker("lsdkjfskf"))
20 print(palchecker("radar"))
双端队列解决回文字符串
原文地址:https://www.cnblogs.com/open-yang/p/11367019.html