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

news/2024/11/5 18:38:38 标签: python, 开发语言, 数据结构, HTML, JavaScript, 队列


一、队列的概念 

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

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


二、队列的实现思路

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

1. 创建一个“小羊队列

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

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

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

3.向队列中添加小羊

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

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

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

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

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

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

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

7.创建一个小羊队列

python">sheep_queue = SheepQueue()

8.添加一些小羊

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

9.输出队列信息

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

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

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

三、完整的Python代码实现

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.niftyadmin.cn/n/5739763.html

相关文章

防范暴力破解工具之Fail2Ban

文章目录 一、安装二、配置 Fail2Ban三、重启Fail2Ban四、验证 Fail2Ban是一个用于保护服务器免受恶意登录尝试的工具。它监视系统日志文件以检测恶意行为&#xff0c;如多次失败的登录尝试、密码破解等&#xff0c;会自动调整防火墙规则以阻止来自恶意IP地址的进一步访问。通过…

如何熟练掌握八种学术论文的写作风格,全指南和写作示例

在这篇文章中&#xff0c;我会和大家分享每种风格的细微差别&#xff0c;探索写作风格示例&#xff0c;并深入了解这些风格如何将您的写作提升到新的高度。 无论您是学生、研究人员还是专业人士&#xff0c;了解这些写作风格示例都是掌握写作技巧的关键。 什么是写作风格&…

Linux SSH免密登入以及配置脚本

一、ssh原理简单介绍 客户端生成一对公钥和私钥&#xff0c;并将自己的公钥发送到服务器上 其中公钥用来加密&#xff0c;私钥用来解密。 二、ssh免密登入实现步骤详解 我这就以服务器controller和客户端compute来做为例子 2.1、首先在controller上输入ssh-keygen -t rsa …

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

性能测试:主流性能剖析工具介绍

性能剖析的介绍 性能剖析是指对应用程序或系统进行分析和测量&#xff0c;以确定其性能瓶颈和优化潜力的过程。它可以帮助开发人员识别和解决应用程序中的性能问题&#xff0c;提高应用程序的响应时间、吞吐量和资源利用率。 性能剖析涉及以下几个方面的内容&#xff1a; 性能…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中&#xff0c;选择Design Settings打开窗口&#xff0c;会有六个选项&#xff1a;DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

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

官网文档&#xff1a;快速开始 | Element Plus webpack配置 // webpack.config.js const AutoImport require(unplugin-auto-import/webpack) const Components require(unplugin-vue-components/webpack) const { ElementPlusResolver } require(unplugin-vue-components…

Moore Perf System 1.1版本

Moore Perf System&#xff08;一款性能分析工具&#xff09; 提供可视化界面&#xff0c;在时间轴上按时间顺序显示 CPU 和 GPU 的事件、吞吐和性能指标&#xff0c;帮助开发人员方便、快速、准确的定位到系统级别的性能瓶颈&#xff0c;进而进行针对性分析和优化&#xff0c;…