python之数据结构与算法(数据结构篇)-- 队列


一、队列的概念 

1.“队列”这个概念,其实可能我们在进行排队的时候是差不多的。

2.例如,在结账时,顾客按照到达顺序排队等待付款,这是现实生活中的一个队列示例。同样地,在计算机程序中,当多个任务需要按顺序处理时,可以使用队列来管理这些任务,确保它们按照进入队列的顺序被执行。


二、队列的实现思路

我们这里去让羊村的小羊们排队放学直观地实现“队列”

1. 创建一个“小羊队列”

class SheepQueue:  # 创建“小羊队列”def __init__(self):self.sheeps = []  # 初始化空队列

2.判断“小羊队列”为空

# 判断队列是否为空def is_empty(self):return len(self.sheeps) == 0

3.向队列中添加小羊

 # 向队列中添加小羊def enqueue(self, sheep):self.sheeps.append(sheep)

4.从队列中移除并返回第一只小羊

# 从队列中移除并返回第一只小羊def dequeue(self):if not self.is_empty():return self.sheeps.pop(0)else:raise IndexError("dequeue from empty queue")

5.返回队列中的第一只小羊但不移除它

 # 返回队列中的第一只小羊但不移除它def peek(self):if not self.is_empty():return self.sheeps[0]else:raise IndexError("peek from empty queue")

6.返回队列中小羊的数量

 # 返回队列中小羊的数量def size(self):return len(self.sheeps)

7.创建一个小羊队列

sheep_queue = SheepQueue()

8.添加一些小羊

# 添加一些小羊
sheep_queue.enqueue("喜羊羊")
sheep_queue.enqueue("美羊羊")
sheep_queue.enqueue("懒羊羊")
sheep_queue.enqueue("沸羊羊")

9.输出队列信息

# 输出队列信息
print("队列是否为空:", sheep_queue.is_empty())  # False
print("队列大小:", sheep_queue.size())  # 4
print("队首的小羊:", sheep_queue.peek())  # 喜羊羊

10.移除并输出队首的小羊

# 移除并输出队首的小羊
print("移除的小羊:", sheep_queue.dequeue())  # 喜羊羊
print("队列大小:", sheep_queue.size())  # 3
print("新的队首小羊:", sheep_queue.peek())  # 美羊羊

三、完整的Python代码实现

class SheepQueue:  # 创建“小羊队列”def __init__(self):self.sheeps = []  # 初始化空队列# 判断队列是否为空def is_empty(self):return len(self.sheeps) == 0# 向队列中添加小羊def enqueue(self, sheep):self.sheeps.append(sheep)# 从队列中移除并返回第一只小羊def dequeue(self):if not self.is_empty():return self.sheeps.pop(0)else:raise IndexError("dequeue from empty queue")# 返回队列中的第一只小羊但不移除它def peek(self):if not self.is_empty():return self.sheeps[0]else:raise IndexError("peek from empty queue")# 返回队列中小羊的数量def size(self):return len(self.sheeps)# 创建一个小羊队列
sheep_queue = SheepQueue()# 添加一些小羊
sheep_queue.enqueue("喜羊羊")
sheep_queue.enqueue("美羊羊")
sheep_queue.enqueue("懒羊羊")
sheep_queue.enqueue("沸羊羊")# 输出队列信息
print("队列是否为空:", sheep_queue.is_empty())  # False
print("队列大小:", sheep_queue.size())  # 4
print("队首的小羊:", sheep_queue.peek())  # 喜羊羊# 移除并输出队首的小羊
print("移除的小羊:", sheep_queue.dequeue())  # 喜羊羊
print("队列大小:", sheep_queue.size())  # 3
print("新的队首小羊:", sheep_queue.peek())  # 美羊羊

四、HYTML可视化实现

效果展示 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>羊村角色队列的可视化</title>
<style>body {font-family: Arial, sans-serif;margin: 20px;text-align: center;}.container {max-width: 600px;margin: 0 auto;text-align: left;}.input-group {margin-bottom: 20px;}.input-group label {display: block;margin-bottom: 5px;}.input-group select {width: 100%;padding: 10px;font-size: 16px;}.input-group button {padding: 10px 20px;font-size: 16px;cursor: pointer;}.result-group {border: 2px solid #ccc;padding: 15px;background-color: #f9f9f9;}.result-item {margin-bottom: 10px;}
</style>
</head>
<body>
<h1>羊村角色队列的可视化</h1><div class="container"><div class="input-group"><label for="queueSelect">选择要入队的角色:</label><select id="queueSelect"><option value="喜羊羊">喜羊羊</option><option value="美羊羊">美羊羊</option><option value="沸羊羊">沸羊羊</option><option value="懒羊羊">懒羊羊</option><option value="暖羊羊">暖羊羊</option></select><button onclick="enqueue()">入队 (Enqueue)</button></div><div class="input-group"><button onclick="dequeue()">出队 (Dequeue)</button></div><div class="input-group"><button onclick="peek()">查看队首 (Peek)</button></div><div class="result-group"><h3>当前队列的状态</h3><ul id="queueDisplay"></ul></div>
</div><script>
// 初始化队列
let queue = [];// 更新队列显示
function updateQueueDisplay() {const queueDisplay = document.getElementById('queueDisplay');queueDisplay.innerHTML = '';for (let i = 0; i < queue.length; i++) {const li = document.createElement('li');li.textContent = queue[i];queueDisplay.appendChild(li);}
}// 入队操作
function enqueue() {const value = document.getElementById('queueSelect').value;if (value) {queue.push(value);updateQueueDisplay();} else {alert("请选择一个角色");}
}// 出队操作
function dequeue() {if (queue.length > 0) {queue.shift(); // 移除队列的第一个元素updateQueueDisplay();} else {alert("队列为空,无法出队");}
}// 查看队首操作
function peek() {if (queue.length > 0) {alert(`队首元素是: ${queue[0]}`);} else {alert("队列为空,没有队首元素");}
}
</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4269.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网卡多队列介绍

一、多队列网卡 1.1 什么是多队列网卡 多队列网卡&#xff08;Multi-Queue NIC&#xff09;支持将网络流量分发到多个处理队列中&#xff0c;以提高系统的网络处理性能和吞吐量。传统上&#xff0c;单队列网卡只有一个硬件队列用于处理所有的输入和输出流量&#xff0c;这可能…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点?

文本语义分块、RAG 系统的分块难题&#xff1a;小型语言模型如何找到最佳断点&#xff1f; 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过 RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减…

linux 安装php扩展:xlswriter

这里以xlswriter扩展为例 进入官方扩展&#xff1a;https://pecl.php.net查询自己php对应版本的扩展包 下载扩展 wget https://pecl.php.net/get/xlswriter-1.5.5.tgz 解压扩展 tar -zxvf xlswriter-1.5.5.tgz 进入扩展目录 cd xlswriter-1.5.5 查找对应php版本的phpiz…

IPC原理

消息队列 什么是消息队列 消息队列接口 msgget msgctl ipcs -p msgsnd msgrcv code示例 发送到消息队列&#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include…

成为编程高手 day16

今天在学结构体 网上说可以用点号找到对应的地方&#xff0c;但是发现不可以&#xff0c;后来上网查资料 vs里面需要把cpp改成c才可以 我爱说实话&#xff0c;这玩意咋这么长。

U8C表体存货或编码相关的字段赋值不上

涉及到表体有存货相关字段的单据&#xff0c;如果更改源码或者客开的时候使用VO赋值&#xff0c;跟代码VO的存货字段有值&#xff0c;但是在前台不显示有值&#xff0c;或者说在前台显示没有值。 需要你在使用this.getBillCardPanel().setBillValueVO(oldVO);或者ui.getBillCa…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …

albert模型实现微信公众号虚假新闻分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

nginx系列--(一)--调试环境搭建

辅助脚本&#xff1a; #!/bin/bash mkdir -p $(pwd)/nginxhome # 生成 Makefile,--prefix need a absolute path --with-stream表示要包括stream模块 auto/configure --prefix$(pwd)/nginxhome --with-stream # lsof -i tcp:10086 && fuser -k 10086/tcp ||true # 定…

Flutter开发者必备面试问题与答案06

Flutter开发者必备面试问题与答案06 视频 https://youtu.be/a1NAfSQrpIg https://www.bilibili.com/video/BV1g71KYREBN/ 前言 原文 Flutter 完整面试问题及答案06 本文是 flutter 面试问题的第六讲。 正文 51. 定义什么是 App State &#xff1f; 在 Flutter 中&#xf…

ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 相关问题&#xff1a; 查询范围固定的需求 直接计算两点之间距离区域二进制编码GeoHash编码 查询范围不固定的需求 GeoHash编码索引结构设计 基于…

element-plus按需引入报错IconsResolver is not a function

官网文档&#xff1a;element-plus-best-practices/vite.config.ts at db2dfc983ccda5570033a0ac608a1bd9d9a7f658 sxzz/element-plus-best-practices GitHubElement Plus Best Practices 最佳实践. Contribute to sxzz/element-plus-best-practices development by creating…

恢复Ubuntu+Windows10双系统安装前状态及分区还原详细步骤

1、恢复到安装 Ubuntu 之前的状态&#xff0c;先看看系统属性 2、选择 运行 3、 输入 msinfo32 回车 4、注意查看 BIOS 模式这一栏&#xff0c;UEFI&#xff0c;这里我们以UEFI系统为例 5、下来就可以开始进行 Ubuntu 的移除操作了 6、从Windows打开网页搜索磁盘精灵&#xff0…

SQL实战训练之,力扣:1843. 可疑银行账户

目录 一、力扣原题链接 二、题目描述 三、建表语句 四、题目分析 五、SQL解答 六、最终答案 七、验证 八、知识点 一、力扣原题链接 1843. 可疑银行账户 二、题目描述 表: Accounts ---------------------- | Column Name | Type | ---------------------- | acco…

酒店管理系统|基于java和小程序的酒店管理小程序系统设计与实现(源码+数据库+文档)

酒店管理小程序系统 目录 基于java和小程序的酒店管理小程序系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

Template Method(模板方法)

1)意图 定义一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2)结构 模板方法模式的结构图如图7-47 所示。 其中: AbstractClass(抽象类) 定义抽象的原语操作&#xff0c;具体…

TrafficPeak | TB级云原生数据平台释放全新洞察力

Hydrolix是一款专为TB级工作负载设计的云原生数据平台&#xff0c;旨在消除现有解决方案中广泛存在的数据焦虑、技术障碍和限制等问题&#xff0c;为用户提供不受限制的实时可观察性。 最近&#xff0c;Hydrolix与Akamai联手&#xff0c;基于Akamai Connected Cloud提供完全托管…

C++ | Leetcode C++题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int singleNonDuplicate(vector<int>& nums) {int low 0, high nums.size() - 1;while (low < high) {int mid (high - low) / 2 low;mid - mid & 1;if (nums[mid] nums[mid 1]) {low mid…

IT架构管理

目录 总则 IT架构管理目的 明确组织与职责 IT架构管理旨在桥接技术实施与业务需求之间的鸿沟&#xff0c;通过深入理解业务战略和技术能力&#xff0c;推动技术创新以支持业务增长&#xff0c;实现技术投资的最大价值。 设定目标与范围 IT架构管理的首要目的是确立清晰的组织…

vue2中使用vue-awesome-swiper实现轮播

swiper官方文档&#xff1a;Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 1.安装 注意&#xff1a;swiper和vue-awesome-swiper的版本一定一定一定要相对应&#xff0c;版本对应如下&#xff1a; Swiper 5-6 vue-awesome-swiper4.1.1(vue2) Swiper 4.x vue-awesome-swi…