目录
1.首先我们要先建存放队列数据结构,我们这里采用顺序表,因为主要存放的数据是名字,也就是常说的字符串,我们可以按照如下方式,进行构建:
一.自我介绍
哈喽大家好,此篇文章将讲到队列的使用,这里所讲的数据结构倾向于实战,大家不要拘泥于具体的写法,而重在学习原理,和使用方式,我们所需要的是简洁、实用和快速。我们这节课主要目标学会队列原理与实现,学会灵活地运用,能够不依赖于模板根据题目独立写出队列。
二.什么是队列
如果说链表和顺序表是对数据的存取位置的组织方式,那么队列就是一种对于存取方式限制的组织方式。换一种方式描述的话就是,队列既可以采用链表来表示,也可以采用数组(线性表)来表示,我们限制的是对于存放数据的存取方式。
似乎定义是有些晦涩难懂,我们来用图来介绍一下队列,什么是队列。队列如其名,就是按照队列的方式来存取,什么是队列呢,我们举一张打饭的图作为例子。
三.队列在内存中的存储方式
当然我们也是有两种对于队列的存储方式
.顺序存储方式和链式存储方式![](https://img-blog.csdnimg.cn/73b22352f61a44e7bc52c22f78d362c5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6bmP5Zyo6Lev5LiKXw==,size_20,color_FFFFFF,t_70,g_se,x_16)
队列链式存储为什么和链表的头尾指针相反呢?
其实我们知道链表的表头是用来插入数据的,表尾处的数据才是最先插入的,先入先出原则,所以表尾出的数据最先出列,也就是队列的头啦!听到这里,可能有人迷糊了,什么头什么尾的?链表是数据存储的组织方式,他只是决定了数据在内存中怎么存储,而队列是说我们是按照什么顺序存储。可以理解为一群人排队,队列告诉他们先来的先吃饭,后来的得排队,而链表或顺序表是说,你可以站着排队蹲着排队等等。
队列的逻辑结构
- 队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。
- 空队列:不含任何数据元素的队列。
- 允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。
- 队列操作特性:先进先出,后出后入.
四.队列在题目中的实战
1.银行排队问题
银行排队问题,CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP 用户进入 VIP 用户窗口,剩下的进入普通窗口排队。
第一行 M 次操作(M<1000)
第二行 到 第M+1行 输入操作
格式: IN name V
OUT V
IN name2 N
OUT N
即 第一个字符串为操作 是IN进入排队和OUT 出队
IN 排队 跟着两个字符串为姓名和权限V或N
OUT 为出队即完成操作,V和N代表那个窗口完成了操作
输出:M次操作后V队列和N队列中姓名,先输出V队列后输出N队列。
样例:
输入:
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出:
Adel
CLZ
laozhao