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

一、双端队列

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

  • 跟队列相似,其两端可以称作**“首”“尾”**端,但数据项既可以从队首加入,也可以从队尾加入;数据项也可以从两端移除。某种意义上说,双端队列集成了栈和队列的能力。
  • 但双端队列并不具有内在的LIFO或者FIFO特性。如果用双端队列来模拟栈或队列,需要由使用者自行维护操作的一致性
    在这里插入图片描述

抽象数据类型-双端队列Deque

方法名描述返回值
Deque()创建一个空双端队列无返回值
addFront(item)将item加入队首无返回值
addRear(item)将item加入队尾无返回值
removeFront()从队首移除数据项,返回值为移除的数据项移除的数据项
removeRear()从队尾移除数据项,返回值为移除的数据项移除的数据项
isEmpty()返回deque是否为空布尔值(True/False)
size()返回deque中包含数据项的个数整数(数据项的个数)

用Python实现ADT Deque

  • 约定:队首是列表的末端;队尾是列表的首端。(也可以倒过来)
class Deque:
    def __init__(self):
        self.items = []

    def add_front(self, item):
        self.items.append(item)

    def add_rear(self, item):
        self.items.insert(0, item)

    def remove_front(self):
        return self.items.pop()

    def remove_rear(self):
        return self.items.pop(0)

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)

二、双端队列应用-回文词判定

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

  • 例如英文中的:radar、madam、toot。中文中的:“上海自来水来自海上”,“山东落花生花落东山”
  • “回文词”判定:
    • 先将需要判定的词加入deque
    • 再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符
from my_deque import Deque


def pal_checker(expression):
    if len(expression) == 1:  # 排除只有一个字的情况
        return False
    char_deque = Deque()
    for i in expression:
        char_deque.add_front(i)

    while char_deque.size() > 1:
        front = char_deque.remove_front()
        rear = char_deque.remove_rear()
        if front != rear:
            return False

    return True


print(pal_checker("madam"))
print(pal_checker("a"))
print(pal_checker("山东落花生花落东山"))


### 输出结果
True
False
True

您正在阅读的是《数据结构与算法Python版》专栏!关注不迷路~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值