队列 Python

一、队列的实现

python 复制代码
class Queue:
    def __init__(self):
        self.items = []

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

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

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

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

二、实例问题

1.模拟传土豆

思路:

假设握着土豆的孩子位于队列的头部。在模 拟传土豆的过程中,程序将这个孩子的名字移出队列,然后立刻将其插入队列的尾部。随后,这 个孩子会一直等待,直到再次到达队列的头部。在出列和入列 num 次之后,此时位于队列头部 的孩子出局,新一轮游戏开始。如此反复,直到队列中只剩下一个名字(队列的大小为 1)。

python 复制代码
from main import Queue


def hotPotato(namelist, num):
    simqueue = Queue()
    # 将名字加入到列表中
    for name in namelist:
        simqueue.enqueue(name)

    while simqueue.size() > 1:
        # 实现了一个环,将头部元素出列,再使得该元素入列到尾部
        for i in range(num):
            simqueue.enqueue(simqueue.dequeue())
        simqueue.dequeue()

    return simqueue.dequeue()


result = hotPotato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7)
print(result)

2.模拟打印机(还未看懂--4.20更新)

三、双端队列

1.实现方式

须有的功能

python 复制代码
class Deque:
    def __init__(self):
        self.items = []

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

    # 前端添加元素
    def addFront(self, item):
        self.items.append(item)

    # 后端添加元素
    def addRear(self, item):
        self.items.insert(0, item)

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

    # 从前端移除一个元素
    def removeFront(self):
        return self.items.pop()

    # 从后端移除一个元素
    def removeRear(self):
        return self.items.pop(0)

2.实际应用

2.1回文检测器

思路:

使用一个双端队列来存储字符串中的字符。按从左往右的顺序将字符 串中的字符添加到双端队列的后端。此时,该双端队列类似于一个普通的队列。然而,可以利 用双端队列的双重性,其前端是字符串的第一个字符,后端是字符串的最后一个字符,两者是否相等

python 复制代码
# class Deque我定义在main.py文件中,用前需导入
from main import Deque


def palchecker(aString):
    '''
    回文检测器
    :param aString: 传入字符串
    :return: bool型数据
    '''
    chardeque = Deque()  # 定义双端队列
    # 从做到用遍历字符串并将其添加到双端队列的后端
    for ch in aString:
        chardeque.addRear(ch)

    stillEqual = True  # 用于判断是否为回文字符串

    while chardeque.size() > 1:
        leftchar = chardeque.removeFront()  # 原先左边字符
        rightchar = chardeque.removeRear()  # 原先右边字符
        if leftchar != rightchar:
            stillEqual = False

    return stillEqual

result = palchecker("palchecker")
print(result)
相关推荐
bzmK1DTbd2 小时前
Git版本控制:Java项目中的分支管理与合并策略
java·开发语言·git
Rust研习社3 小时前
为什么 Rust 没有空指针?
开发语言·后端·rust
landyjzlai3 小时前
蓝迪哥玩转Ai(8)---端侧AI:RK3588 端侧大语言模型(LLM)开发实战指南
人工智能·python
kyriewen113 小时前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
开发语言·前端·javascript·c++·单元测试·ecmascript
我叫黑大帅4 小时前
如何通过 Python 实现招聘平台自动投递
后端·python·面试
其实防守也摸鱼5 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
砚底藏山河5 小时前
Python量化开发:2026最佳实时股票数据API接口推荐与对比
开发语言·windows·python
AlunYegeer6 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端
研究点啥好呢6 小时前
专为求职者开发的“面馆”!!!摆脱面试焦虑!!!
python·面试·开源·reactjs·求职招聘·fastapi
hixiong1236 小时前
C# OpenvinoSharp使用DINOv2模型进行图像相似度计算
开发语言·c#