Python数据结构与算法——双端队列Dequeue

老子叫甜甜 提交于 2021-02-20 08:06:51
点击上方 蓝字 关注我们



双端队列Dequeue


双端队列是一种有序的数据集,与队列相似,但双端队列的两端都可以作为队首和队尾(即数据在两端都可以删除和插入


某种意义上来说,双端队列Dequeue集合了栈和队列的功能,Dequeue既可以实现栈也可以实现队列


双端队列的操作:

Dequeue()
创建一个双端队列
addFront() 队首加入数据
addFear()
队尾加入数据
removeFront() 队首删除数据
removeFear() 队尾删除数据
size()
双端队列元素个数
isEmpty()
是否为空



双端队列使用实例:



双端队列代码:




双端队列应用——“回文词”判定


“回文词”:正读和反读都一样的词

例:radar(雷达),madam,foot,“上海自来水来自海上”,“山东落花生花落”


算法:利用双端队列Dequeue,先将字符串加入双端队列,再从两端开始移除判断是否相同,最后剩一个字符


代码:



所有代码:

class Dequeue():    """双端队列"""
def __init__(self): self.items = []
def addFront(self, item): self.items.append(item)
def addFear(self, item): self.items.insert(0, item)
def removeFront(self): """时间复杂O(1)""" return self.items.pop()
def removeFear(self): """时间复杂度O(n)""" return self.items.pop(0)
def size(self): return len(self.items)
def isEmpty(self): return self.items == []

def check_backwords(backwords): """回文词判断""" check_dequeue = Dequeue() mark = True
for word in backwords: check_dequeue.addFront(word)
while check_dequeue.size() > 1 and mark: # 从两端取出数据进行对比 check1 = check_dequeue.removeFear() check2 = check_dequeue.removeFront()
if check1 != check2: mark = False
    return mark


别忘了点个在看哦!转发那就太好了!




本文分享自微信公众号 - 小杨的python之路(gh_6ba152d49331)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!