Python描述数据结构之队列实战篇(转载)

文章目录
前言

  1. LeetCode933:最近的请求次数

  2. LeetCode641:设计循环双端队列

  3. LeetCode622:设计循环队列
    结束语
    前言
      LeetCode中有关队列的题目。

  4. LeetCode933:最近的请求次数
      LeetCode的第933题:最近的请求次数。
      这个题首先要读懂题|ू・ω・` ),题的意思可以理解为有一个队列,然后计算队列元素在区间[t-3000,3000]内的的个数。代码如下:

class RecentCounter:
def init(self):
self.queue = []

def ping(self, t):
    self.queue.append(t)
    while self.queue[0] < t - 3000:
        self.queue = self.queue[1:]
    return len(self.queue)
  1. LeetCode641:设计循环双端队列
      LeetCode的第641题:设计循环双端队列。
      这个题主要就是借助Python里面的collections库里面的deque类来构建双端队列,下面就介绍deque类里面几个常用的方法:

方法 功能
collections.deque(maxlen) 初始化一个最大长度为maxlenmaxlen双端队列,当双端队列已经满时,再插入数据,就会有相应个数的数据从另一端出来
append(value) 添加valuevalue到右端
appendleft(value) 添加valuevalue到左端
pop() 移除最右侧的元素
popleft() 移除最左侧的元素
extend(iterable) 在队列右侧添加iterableiterable中的元素
extendleft(iterable) 在队列左侧添加iterableiterable中的元素(iterableiterable参数的顺序将会反过来添加)
  除此之外还有clear()、copy()、count()、index()、insert()、remove()、reverse(),这里就不一一介绍了。

代码如下:

class MyCircularDeque:

def __init__(self, k):
    from collections import deque
    self.length = k
    self.queue = deque(maxlen=self.length)

def insertFront(self, value):
    if self.isFull():
        return False
    else:
        self.queue.appendleft(value)
        return True

def insertLast(self, value):
    if self.isFull():
        return False
    else:
        self.queue.append(value)
        return True

def deleteFront(self):
    if self.isEmpty():
        return False
    else:
        self.queue.popleft()
        return True

def deleteLast(self):
    if self.isEmpty():
        return False
    else:
        self.queue.pop()
        return True

def getFront(self):
    if self.isEmpty():
        return -1
    else:
        return self.queue[0]

def getRear(self):
    if self.isEmpty():
        return -1
    else:
        return self.queue[-1]

def isEmpty(self):
    if len(self.queue) == 0:
        return True
    else:
        return False

def isFull(self):
    if len(self.queue) == self.length:
        return True
    else:
        return False
  1. LeetCode622:设计循环队列
      LeetCode的第622题:设计循环队列。
      有关循环队列的操作及代码实现,请参考的我的这篇博客,这里不再叙述,代码如下:

class MyCircularQueue:

def __init__(self, k: int):
    self.length = k + 1
    self.queue = [None] * self.length
    self.front = 0
    self.rear = 0

def enQueue(self, value):
    if self.isFull():
        return False
    else:
        self.queue[self.rear] = value
        self.rear = (self.rear + 1) % self.length
        return True

def deQueue(self):
    if self.isEmpty():
        return False
    else:
        self.front = (self.front + 1) % self.length
        return True

def Front(self):
    if self.isEmpty():
        return -1
    else:
        return self.queue[self.front]

def Rear(self):
    if self.isEmpty():
        return -1
    else:
        return self.queue[self.rear-1]

def isEmpty(self):
    if self.front == self.rear:
        return True
    else:
        return False

def isFull(self):
    if (self.rear + 1) % self.length == self.front:
        return True
    else:
        return False

结束语
  队列的题貌似不太多(也许是没有找到),就选了这几个常规题先简单练习一下,大致感觉简单的队列就直接用列表,双端队列就直接使用collections库里面的deque类,其他的暂时还没有想到,嘿嘿。

原文链接:https://blog.csdn.net/qq_42730750/article/details/108148596?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-9.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-9.nonecase&request_id=5f43995ccea070620e93ef34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值