线性结构之---双端队列

什么是双端队列Deque?

双端队列是一种有次序的数据集。跟队列相似,其两端可以称作“首”“尾”端,但Deque中数据项既可以从队首加入,也可以从队尾加入;也可以从两端移除,某种意义上来讲,双端队列集成了栈和队列的能力。

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

Deque基本操作

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

python实现ADT Deque

列表首段端为栈顶
class Deque:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def addFront(self,item):
        self.items.append(0,item)

    def addRear(self,item):
        self.item.insert(0,item)

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

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

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

双端队列之"回文词判断"

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

如:toot,madam,radar......

思路:先将需要判定的词从队尾加入,再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符

代码实现:

from pythonds.basic.deque import Deque


# 创建用于判断的方法
def palchecker(aString):
    # 初始化空双端队列
    chardeque = Deque()

    # 字符串进行遍历,加入到队列中
    for ch in aString:
        chardeque.addRear(ch)
    # 标记为True
    stillEqual = True
    # 但数量大于1
    while chardeque.size() > 1 and stillEqual:
        # 队首取出来
        first = chardeque.removeFront()
        # 队尾取出来
        last = chardeque.removeRear()
        # 如果不相等
        if first != last:
            stillEqual = False

    # 相等返回True
    return stillEqual


print(palchecker('nvken'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值