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


一、队列的概念

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可视化实现

效果展示

html 复制代码
<!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>
相关推荐
ping某35 分钟前
专栏-null 和 undefined 到底是什么?
前端·javascript·后端
呱呱复呱呱2 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
swipe4 小时前
从 0 到 1 理解 React 虚拟列表:定高、不定高与 Canvas 版本完整拆解
前端·javascript·面试
铁皮饭盒4 小时前
Bun执行python代码
前端·javascript·后端
zzzzzz3106 小时前
当甲方说'logo放大的同时再缩小一点'时,我用 AI 把这个需求做出来了
javascript·css·程序员
Hilaku6 小时前
Node.js 还能再战十年?给你一个不换引擎的理由
前端·javascript·程序员
曲幽6 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
weedsfly6 小时前
前端必知必会:从 IIFE 到 ESM,模块化到底在解决什么?
前端·javascript
渣波7 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
槑有老呆7 小时前
每次跟大模型聊天,都是一次「失忆」的 HTTP 请求
javascript