当前位置: 首页 > news >正文

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

本文目录

    • 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包实现

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

结果

A
B

(2)基于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()

结果

入队: 1
入队: 2
出队: 1
队列内容: 2
循环队列

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

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[<

相关文章:

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

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

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动&#xff0c;自动进入紧急模式&#xff08;You are in emergency mode&#xff09;。具体如下所示&#xff1a; 二、解决办法 按CtrlD进…...

解决无网条件下离线安装缺失的python包

首先在有网的机器上使用conda create --name xx pythonx.x.x 命令创建一个和目标机器(无网)一样的环境 使用 下面命令 pip download opencv-python -d C:\Users\xuhaitao\Desktop\installer pip download pyinstaller -d C:\Users\xuhaitao\Desktop\installer 在目标…...

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中&#xff0c;突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力&#xff0c;国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…...

Spring DI 笔记

目录 1.什么是DI? 2.依赖注入的三种⽅式 2.1属性注⼊ 2.2构造⽅法注⼊ 2.3Setter 注⼊ 2.4三种注⼊优缺点分析 3.Autowired存在问题 1.什么是DI? DI: 依赖注⼊ 依赖注⼊是⼀个过程&#xff0c;是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源&#xff0c;⽽资源指的…...

psutil库的使用说明

前言 psutil是一个跨平台的库&#xff0c;用于获取系统的进程和系统利用率&#xff08;包括 CPU、内存、磁盘、网络等&#xff09;信息。 目录 安装 应用场景 常用方法 一、系统信息相关函数 二、进程信息相关函数 三、网络信息相关函数 四、其他实用函数 使用样例 监控应…...

PMP--三模--解题--71-80

文章目录 7.成本管理--S曲线--S曲线对累计值进行监督和报告--S曲线可以同时报告成本与进度情况。适用于预测和敏捷项目。14.敏捷--信息发射源--是一种可见的实物展示其向组织内其他成员提供信息在不干扰团队的情况下即时实现知识共享。71、 [单选] 项目经理正在为刚刚进入第三次…...

iTextPDF 一个功能强大的 Java PDF 库

iTextPDF 是一个功能强大的 Java PDF 库&#xff0c;它提供了丰富的 API 用于创建和操作 PDF 文档。以下是一些 iTextPDF 的常用功能&#xff1a; 创建 PDF 文档&#xff1a;可以创建新的 PDF 文档&#xff0c;并设置页面大小、边距、背景颜色等 。 添加文本&#xff1a;在 PD…...

QT C++ 自学积累 『非技术文』

QT C 自学积累 『非技术文』 最近一段时间参与了一个 QT 项目的开发&#xff0c;使用的是 C 语法&#xff0c;很遗憾的是我之前从来没有接触过 C &#xff0c;大学没有开过这堂课&#xff0c;也没用自己学习过&#xff0c;所有说上手贼慢&#xff0c;到现在为止其实也不是很清楚…...

浅谈虚拟内存(操作系统、Redis)

浅谈虚拟内存&#xff08;操作系统、Redis&#xff09; 参考&鸣谢 4.1 为什么要有虚拟内存&#xff1f; xiaolincoding 【简单说下】REDIS的虚拟内存机制,会吗?别翻书 aristo_boyunv Redis 虚拟内存 Java杨永杰 浅谈虚拟内存&#xff1a;操作系统与 Redis 在计算机系统中…...

【LeetCode HOT 100】详细题解之链表篇

LeetCode HOT 100题解之链表篇 160 相交链表题目分析代码 206 反转链表方法一&#xff1a;迭代 234 回文链表方法一&#xff1a;将值复制到数组中方法二&#xff1a;快慢指针 141 环形链表方法一&#xff1a;哈希表方法二&#xff1a;快慢指针 142 环形链表II方法一&#xff1a…...

二叉树的递归遍历

方法论 确定递归函数的参数和返回值 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在递归函数里加上这个参数&#xff0c; 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件 写完了递归算法, 运行的时候&#xff0c;经常会遇到栈溢…...

国内访问OpenAI API

最近在学习LLM。绕不过去的肯定要学习OpenAI。 国内想直接使用官方API十分麻烦。就到处查资料及网友的分享。发现了这个代理可以在国内很方便的使用OpenAI API。 代理的地址如下&#xff1a; https://referer.shadowai.xyz/r/1014150 经过一段实际体验下来&#xff0c;这个…...

深入 Spring RestTemplate 源码:掌握 HTTP 通信核心技术

在上一篇文章《Spring Boot 项目高效 HTTP 通信&#xff1a;常用客户端大比拼&#xff01;》里&#xff0c;我们提到了RestTemplate&#xff0c;它是Spring框架提供的Http客户端&#xff0c;在springboot项目开发过程中&#xff0c;属于使用最为广泛的 HTTP 客户端之一了。今天…...

计算机网络:计算机网络概述 —— 初识计算机网络

文章目录 计算机网络组成部分网络架构协议与标准网络设备网络类型作用实际应用案例 计算机网络 计算机网络是指将多台计算机通过通信设备和通信链路连接起来&#xff0c;以实现数据和信息的交换和共享的技术和系统。它是现代信息社会的基础设施之一&#xff0c;也是互联网的基…...

set和map结构的使用

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、序列式容器和关联式容器 二、set和multiset 1.insert 2.erase 3.find 4.count 三、map和mapmulti 1.pair 2.insert 3.find 4.operator[ ] 5.erase 6.lo…...

2. qt_c++反射实例

目录 使用场景元对象相关类及宏常用功能获取类相关内容以及委托调用 使用场景 Qt基于强大的元对象系统实现反射机制&#xff1b; 在复杂的开发需求中&#xff0c;我们希望通过一些手段映射出我们的类&#xff08;映射对象&#xff09; 然后直接使用&#xff0c;通过&#xff0…...

卷积神经网络(CNN)的计算量和参数怎么准确估计?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 1. 卷积层&#xff08;Convolutional Layer&#xff09; a) 计算量估计&#xff1a; 卷积层的 FLOPs 2 * H_out * W_out * C_in * C_out * K_h * K_w 详细解释&#xff1a; H_out, W_out&#xff…...

Ruby基础语法

Ruby 是一种动态、反射和面向对象的编程语言&#xff0c;它以其简洁的语法和强大的功能而受到许多开发者的喜爱。以下是 Ruby 语言的一些基本语法&#xff1a; 1. 打印输出 puts "Hello, Ruby!" 变量赋值 x 10 name "John" 2. 数据类型 Ruby 有多种…...

插入排序C++

题目&#xff1a; 样例解释&#xff1a; 【样例解释 #1】 在修改操作之前&#xff0c;假设 H 老师进行了一次插入排序&#xff0c;则原序列的三个元素在排序结束后所处的位置分别是 3,2,1。 在修改操作之后&#xff0c;假设 H 老师进行了一次插入排序&#xff0c;则原序列的三个…...

Mirage Flow 硬件开发入门:Keil5 MDK安装与嵌入式AI项目创建

Mirage Flow 硬件开发入门&#xff1a;Keil5 MDK安装与嵌入式AI项目创建 如果你对把AI模型塞进一个小小的单片机里感到好奇&#xff0c;想亲手试试让硬件“聪明”起来&#xff0c;那么你来对地方了。很多朋友在第一步——搭建开发环境上就卡住了&#xff0c;面对一堆安装包和配…...

SpringBoot整合ANIMATEDIFF PRO:企业级API网关设计

SpringBoot整合ANIMATEDIFF PRO&#xff1a;企业级API网关设计 动画生成服务在企业级应用中面临高并发挑战&#xff0c;如何构建稳定可靠的API网关成为关键问题 1. 企业级动画生成服务的挑战与需求 在现代企业应用中&#xff0c;AI动画生成服务已经成为内容创作、营销推广、教…...

ollama部署本地大模型|translategemma-4b-it效果对比:vs NLLB-3B、vs SeamlessM4T-v2

ollama部署本地大模型&#xff5c;translategemma-4b-it效果对比&#xff1a;vs NLLB-3B、vs SeamlessM4T-v2 想在自己电脑上跑一个翻译模型&#xff0c;但又担心模型太大、速度太慢&#xff1f;今天我们来聊聊一个轻量级的新选择——Google推出的TranslateGemma-4b-it。更重要…...

Local AI MusicGen开箱即用:WebUI汉化+中文Prompt提示模板集成

Local AI MusicGen开箱即用&#xff1a;WebUI汉化中文Prompt提示模板集成 1. 引言 想不想拥有一个私人AI作曲家&#xff1f;不需要你懂五线谱&#xff0c;也不需要昂贵的编曲软件&#xff0c;只要输入几个词&#xff0c;比如“悲伤的小提琴”或者“赛博朋克电子乐”&#xff…...

百川2-13B中文优势:OpenClaw在本地化办公场景中的特殊优化技巧

百川2-13B中文优势&#xff1a;OpenClaw在本地化办公场景中的特殊优化技巧 1. 为什么选择百川2-13B处理中文办公文档 去年我在整理团队季度报告时&#xff0c;曾尝试用多个开源模型处理中文PDF和微信群聊记录。当通用英文模型遇到中文标点符号和行业术语时&#xff0c;要么漏…...

深入解析DHT11单总线通信:如何通过时序控制实现稳定数据传输?

1. DHT11单总线通信的基本原理 第一次用DHT11传感器时&#xff0c;我被它只用一根线就能传数据惊到了。这就像两个人打电话&#xff0c;不需要复杂的线路&#xff0c;只要一根电话线就能聊天气温湿度。DHT11采用的单总线协议&#xff08;1-Wire Protocol&#xff09;就是这样一…...

AMC1100隔离放大器实战:如何用DUB封装搞定三相电流电压测量?

AMC1100隔离放大器实战&#xff1a;DUB封装在三相测量中的高阶应用 工业电力监测领域对精度与安全性的双重苛求&#xff0c;催生了隔离放大器技术的持续迭代。当我在某变电站监测系统升级项目中首次接触AMC1100时&#xff0c;这款采用DUB封装的全差分隔离放大器以其独特的抗磁场…...

【人物传记】模拟单片集成电路之父-鲍勃·魏德拉

1 鲍勃魏德拉简介 鲍勃魏德拉&#xff08;Bob Widlar&#xff09; (1937-1991)模拟集成电路的奠基人&#xff0c;以μA702、μA709等开创性设计定义了模拟芯片的规则&#xff0c;用反叛与幽默改写了硅谷的精神&#xff0c;其创造的电流源、带隙基准等技术至今仍运行在每一块芯…...

ncmdumpGUI+解决网易云音乐NCM文件跨设备播放痛点

ncmdumpGUI解决网易云音乐NCM文件跨设备播放痛点 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 问题场景&#xff1a;被加密的音乐自由 想象这样的场景&…...

OpenClaw技能组合:GLM-4.7-Flash多功能集成方案

OpenClaw技能组合&#xff1a;GLM-4.7-Flash多功能集成方案 1. 为什么需要技能组合&#xff1f; 去年冬天&#xff0c;我接手了一个内容运营的兼职项目&#xff0c;需要每周整理行业动态、生成分析报告并发布到三个不同平台。最初我尝试手动操作&#xff0c;但很快发现这种重…...