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>
相关推荐
小陈phd几秒前
深度学习之超分辨率算法——SRCNN
python·深度学习·tensorflow·卷积
寻找沙漠的人几秒前
前端知识补充—HTML
html
CodeClimb1 分钟前
【华为OD-E卷-简单的自动曝光 100分(python、java、c++、js、c)】
java·python·华为od
数据小小爬虫12 分钟前
如何利用Python爬虫获取商品历史价格信息
开发语言·爬虫·python
Gao_xu_sheng14 分钟前
Java程序打包成exe,无Java环境也能运行
java·开发语言
NiNg_1_23419 分钟前
Python的sklearn中的RandomForestRegressor使用详解
开发语言·python·sklearn
谢家小布柔23 分钟前
java中的继承
java·开发语言
黑色叉腰丶大魔王23 分钟前
《基于 Python 的网页爬虫详细教程》
开发语言·爬虫·python
l1384942745129 分钟前
Java每日一题(2)
java·开发语言·游戏
晓纪同学36 分钟前
QT创建一个模板槽和信号刷新UI
开发语言·qt·ui