数据结构编程实践20讲(Python版)—04队列

embedded/2024/10/9 5:31:17/

本文目录

    • 04 队列 Queue
      • S1 说明
      • S2 示例
        • 普通队列
        • 循环队列
        • 双端队列
        • 优先队列
      • S3 问题:基于普通队列实现的打印机任务管理
        • Python3程序
      • S4 问题:使用循环队列管理玩家移动轨迹
        • Python3程序
      • S5 问题:使用双端队列来管理文档操作历史
        • Python3程序
      • S6 问题:使用优先队列管理车辆调度
        • Python3程序

往期链接

01 数组02 链表03 栈

04 队列 Queue

S1 说明

队列是一种先进先出(FIFO,First In First Out)的数据结构。数据在队列中的插入操作称为入队(enqueue),而删除操作称为出队(dequeue)。队列的特性和分类如下:

特征

  • FIFO:最早进入队列的元素最先被移除。
  • 动态大小:队列的大小可以根据需要动态扩展,具体取决于实现方式。
  • 两端操作:通常只在队列的前端进行出队操作,在后端进行入队操作。

分类

  • 普通队列:基本的FIFO队列。
  • 循环队列:为了优化空间使用,使用循环数组实现的队列。
  • 双端队列(Deque):可以在两端进行插入和删除操作。
  • 优先队列:根据优先级进行出队的队列,出队的元素不一定是最早入队的元素。

S2 示例

普通队列

(1)基于collections包实现

python">from collections import dequequeue = deque()
queue.append('A')  # 入队
queue.append('B')  # 入队
print(queue.popleft())  # 出队
print(queue.popleft())  # 出队

结果

python">A
B

(2)基于python列表实现

python">class Queue:def __init__(self):self.queue = []def enqueue(self, item):self.queue.append(item)print(f"入队: {item}")def dequeue(self):if not self.is_empty():item = self.queue.pop(0)print(f"出队: {item}")return itemprint("队列为空,无法出队")return Nonedef is_empty(self):return len(self.queue) == 0def display(self):print("队列内容:", " <- ".join(map(str, self.queue)))# 示例
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.dequeue()
q.display()

结果

python">入队: 1
入队: 2
出队: 1
队列内容: 2
循环队列

使用固定大小的数组实现循环队列

python">class CircularQueue:def __init__(self, capacity):self.capacity = capacityself.queue = [None] * capacityself.front = -1self.rear = -1def is_empty(self):return self.front == -1def is_full(self):return (self.rear + 1) % self.capacity == self.frontdef enqueue(self, item):if self.is_full():print("队列已满,无法入队")returnif self.is_empty():self.front = 0self.rear = (self.rear + 1) % self.capacityself.queue[self.rear] = itemprint(f"入队: {item}")def dequeue(self):if self.is_empty():print("队列为空,无法出队")return Noneitem = self.queue[self.front]if self.front == self.rear:  # 队列只剩一个元素self.front = self.rear = -1else:self.front = (self.front + 1) % self.capacityprint(f"出队: {item}")return itemdef display(self):if self.is_empty():print("队列为空")returnindex = self.frontelements = []while True:elements.append(str(self.queue[<

http://www.ppmy.cn/embedded/123282.html

相关文章

【网络安全】IP切换绕过2FA身份验证

未经许可,不得转载。 文章目录 正文正文 Juicytarget.com是一个典型的安全测试目标平台,旨在帮助用户学习和测试常见的安全漏洞和攻击手段。 1、我首先登录了 Juicytarget.com,在登录页面输入了我的电子邮件和密码。 2、登录后,我被引导至2FA(两步验证)页面。在此页面…

NFT 是什么?

NFT 是什么? NFT,全称Non-Fungible Token,即“非同质化代币”,是一种基于区块链技术的独特数字资产。NFT的核心特性在于其唯一性、不可分割性和不可替代性,这使其与传统的加密货币(如比特币、以太坊等)形成了鲜明的对比。比特币等加密货币是同质化的,每个单位之间可以…

LeetCode hot100---数组及矩阵专题(C++语言)

1、最大子数组和 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 (2)输入输出描述&#xff1a; 输入&#…

低空无人机飞手四类超视距无人机技术详解

低空无人机飞手中的四类超视距无人机技术详解&#xff0c;主要涉及无人机的性能特点、技术要求、培训内容以及应用场景等方面。以下是对这些方面的详细阐述&#xff1a; 一、四类无人机&#xff08;中型无人机&#xff09;性能特点 四类无人机&#xff0c;现已更名为中型无人…

webpack 4 的 30 个步骤构建 react 开发环境

将 react 和 webpack4 进行结合&#xff0c;集 webpack 的优势于一身&#xff0c;从 0 开始构建一个强大的 react 开发环境。 其实很多人都有 一看就会&#xff0c;一做就废 的特点(当然也包括我在内)&#xff0c;这个时候&#xff0c;你需要制定一个略微详细的计划&#xff0…

深度学习中的卷积神经网络

在深度学习的世界中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种重要的模型。它特别适用于处理具有网格状拓扑结构的数据&#xff0c;如图像和视频。本文将深入探讨CNN的工作原理&#xff0c;以及如何利用它们来处…

【React】增量传输与渲染

增量传输 增量传输是一种高效的文件传输方式&#xff0c;其核心原理在于只传输文件中发生变化的部分&#xff0c;而不是整个文件。以下是增量传输的详细解析&#xff1a; 定义与原理&#xff1a; 增量传输通过比对原始文件和目标文件&#xff0c;找出两者之间的差异部分&#…

2.点位管理开发(续)及设计思路——帝可得后台管理系统

目录 前言一、页面原型二、修改1、页面展示2、新增 3 、总结思路 前言 提示&#xff1a;本篇继续点位管理的改造 一、页面原型 页面展示新增 二、修改 1、页面展示 页面修改&#xff1a;修改标签换行、顺序顺序、地址过长时换行问题&#xff1b; <el-table v-loading…