GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))


第三课《排队王国------认识队列 Queue》


🌟一、故事开场:奶茶王国的大排队

1、在遥远的数据结构王国里,

有一家超级有名的奶茶店:

🧋《珍珠龙奶茶店》

每天都有无数顾客来排队。


这一天,

小勇士阿 C 也来了。


2、🌟第1位顾客

小红先来到队伍:

复制代码
小红

3、🌟第2位顾客

小明来了:

复制代码
小红 ← 前面
小明 ← 后面

4、🌟第3位顾客

小刚来了:

复制代码
小红
小明
小刚

5、🤔问题来了!

现在奶茶做好了。

请问:

谁会最先拿到奶茶?


6、很多同学立刻回答:

✅ 小红!

因为:

🌟先来的人先服务!


7、🌟这就是今天的主角:

🎯队列(Queue)


🌟二、什么是队列?

1、队列是一种特殊的数据结构。

(1)它最重要的规则是:

⚡先进先出


(2)英文叫:

FIFO


(3)全称:

复制代码
First In First Out
先进先出

2、🌟和栈有什么区别?


(1)🌟栈 Stack

像:

复制代码
叠盘子

最后放的先拿。

👉 后进先出


(2)🌟队列 Queue

像:

复制代码
排队买奶茶

先来的先走。

👉 先进先出


🌟三、生活中的队列

其实生活里到处都是队列!


🚌例子1:公交车排队

谁先到站台:

谁先上车。


🎢例子2:游乐园排队

先排队的人:

先玩过山车。


🖨️例子3:打印机

先发送的文件:

先打印。


🍔例子4:食堂打饭

谁先排队:

谁先打饭。


🌟四、队列长什么样?

1、队列有两个重要位置:


(1)🎯队头(front/head)

从这里离开。


(2)🎯队尾(rear/tail)

从这里进入。


2、🌟图示

复制代码
队头                    队尾
 ↓                        ↓
[ 小红 ][ 小明 ][ 小刚 ]

🌟五、队列的四种基本操作


1、⚔️第一招:push(入队)

意思:

👉 从队尾进入。


2、🌟演示

(1)开始:

复制代码
空队列

(2)小红进入:

复制代码
小红

(3)小明进入:

复制代码
小红 小明

(4)小刚进入:

复制代码
小红 小明 小刚

3、⚔️第二招:pop(出队)

意思:

👉 队头离开。


4、🌟演示

(1)现在:

复制代码
小红 小明 小刚

(2)执行:

复制代码
pop();

小红离开!


(3)变成:

复制代码
小明 小刚

5、⚔️第三招:front(查看队头)

意思:

👉 看看最前面是谁。

但不让他离开。


6、🌟演示

(1)现在:

复制代码
小明 小刚

(2)执行:

复制代码
front();

(3)得到:

复制代码
小明

队列不变。


7、⚔️第四招:empty(是否为空)

意思:

👉 队列里还有没有人。


🌟六、要理解"先进先出"


1、🎮小游戏:《排队坐过山车》

规定:

  • 后来的人只能排后面

  • 前面的人先玩


2、🌟顺序

复制代码
A来了
B来了
C来了

队列:

复制代码
A B C

3、🌟开始玩

第一个玩的是:

✅ A

然后:

复制代码
B C

第二个:

✅ B

最后:

✅ C


4、🌟规律发现:

🌟最先进来的

最先出去

这就是:

FIFO!


🌟七、用数组实现队列


1、🌟队列像什么?

可以把数组想成:

复制代码
一排座位

比如:

复制代码
int q[100];

2、🌟我们需要两个指针


(1)🎯head

表示:

队头位置。


(2)🎯tail

表示:

队尾后一个位置。


(3)🌟代码

复制代码
int head = 0;   
int tail = 0;

🌟八、push 的实现(入队)


1、🌟目标

从队尾加入元素。


2、🌟代码

复制代码
q[tail] = x;
tail++;

3、🌟过程理解

(1)开始:

复制代码
head = 0
tail = 0

(2)执行:

复制代码
push(5)

(3)第一步

复制代码
q[0] = 5;

(4)第二步

复制代码
tail++;

(5)变成:

复制代码
tail = 1

4、🌟队列现在

复制代码
5

5、🌟再执行 push(8)

变成:

复制代码
5 8

🌟九、pop 的实现(出队)


1、🌟代码

复制代码
head++;

2、🤔为什么不用删除?

因为:

我们只需要:

👉 让队头往后移动。


3、🌟过程

(1)现在:

复制代码
5 8 3
↑
head

(2)执行:

复制代码
pop();

(3)变成:

复制代码
5 8 3
  ↑
 head

5 就相当于离开了。


🌟十、完整代码(数组队列)

复制代码
#include <iostream>
using namespace std;

int q[100];

int head = 0;
int tail = 0;

int main() {

    // 入队
    q[tail] = 5;
    tail++;

    q[tail] = 8;
    tail++;

    q[tail] = 3;
    tail++;

    // 输出队头
    cout << "队头元素:";
    cout << q[head] << endl;

    // 出队
    head++;

    cout << "出队后队头:";
    cout << q[head] << endl;

    return 0;
}

🌟十一、运行过程


1、🌟开始

复制代码
空
head = 0
tail = 0

2、🌟push(5)

复制代码
5
head = 0
tail = 1

3、🌟push(8)

复制代码
5 8
head = 0
tail = 2

4、🌟push(3)

复制代码
5 8 3
head = 0
tail = 3

5、🌟pop()

复制代码
5 8 3
  ↑
head = 1
tail = 3

队头变成 8。


🌟十二、栈 VS 队列(第一次对比)

这是很多同学刚开始容易搞混的地方!


1、🌟栈 Stack

复制代码
后进先出

像:

  • 叠盘子

  • 薯片桶


2、🌟队列 Queue

复制代码
先进先出

像:

  • 排队

  • 食堂打饭


3、🌟操作对比


(1)🌟栈

复制代码
只能操作顶部

(2)🌟队列

复制代码
一头进
一头出

🌟十三、课堂小游戏:《奶茶店老板》

1、汉克老师扮演奶茶店营业员。

学生排队。


2、规则:

  • 新人只能站最后

  • 只能从最前面叫号


3、帮助同学们真正建立:

🌟"队伍流动"的感觉!


🌟十四、举一反三训练


🤔问题1

为什么打印机适合用队列?


🤔问题2

为什么食堂打饭适合用队列?


🤔问题3

依次入队:

复制代码
1 2 3 4

请写出:

出队顺序。


🤔问题4

如果:

复制代码
队列:
7 2 9

执行一次 pop 后:

新的队头是谁?


🌟十五、为什么队列很重要?

以后你会发现:

很多厉害算法都在用队列!

比如:


1、🌟广度优先搜索 BFS

迷宫最短路!


2、🌟图论

找最短距离!


3、🌟任务调度

电脑系统安排任务!


4、🌟消息处理

聊天软件收消息!


🌟十六、课堂总结


🎯今天学会了什么?


1、🌟队列特点

✅ 先进先出

✅ 一头进,一头出


2、🎯四大操作

操作 作用
push 入队
pop 出队
front 查看队头
empty 判空

3、🎯生活中的队列

✅ 排队买奶茶

✅ 公交车排队

✅ 打印机

✅ 食堂打饭


🌟十七、本课小秘诀

今天最重要的,

不是代码。

而是:

🌟"排队流动"的画面感!

你脑子里要真正出现:

复制代码
人从后面进入
人从前面离开

以后学:

  • BFS

  • 图论

  • 最短路

  • 模拟题

都会轻松很多!

因为:

今天这一课,

其实是很多高级算法的起点!

相关推荐
JavaWeb学起来1 小时前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
j_xxx404_3 小时前
Linux进程信号捕捉与操作系统运行本质深度解析
linux·运维·服务器·开发语言·c++·人工智能·ai
vx-程序开发3 小时前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php
啊董dong4 小时前
noi-2026年5月12号小测验
数据结构·c++·算法
南境十里·墨染春水5 小时前
数据结构 —— 链表
数据结构·链表
咩咦5 小时前
C++学习笔记24:构造函数初始化列表
c++·学习笔记·类和对象·构造函数·初始化列表·const引用
计算机安禾5 小时前
【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
java·开发语言·c++
10岁的博客6 小时前
C++ 进制转换:通用 a 进制转 b 进制(2-36进制)题解
开发语言·c++
图码6 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组