3.2.1 队列的基本概念
队列的定义
队列是只允许在一段进行插入,在另一端删除的线性表
(可以相较于栈来看,队列顾名思义,更像队伍)
特点:先进先出
重要术语:队头(允许删除)、队尾(允许插入)、空队列
队列的基本操作:
知识回顾与重要考点:
3.2.2 队列的顺序实现
队列的初始化操作:
入队操作:
(运用了取余预算,实际上是在逻辑上变成了环状的逻辑空间;由于初始的时候rear指针和front指针指向同一个位子,并且我们是通过判断两者是否相等来确定是否是空表的,所以必须得牺牲一个储存空间,用Q.rear==(Q.rear+1)%MaxSize来判断是否满队了;rear指针指向的是下一个空结点,而front指针指向的是有数据的头结点)
出队操作:
查找操作(一般指获得队头元素):
(与出队操作几乎一致)
判断:队列已满/已空:
方案一:
队列元素个数(常考,要记住):
(rear + MaxSize - front)% MaxSize
(有牺牲一个存储空间)
方案二:
(在结构体定义的时候多定义一个size,表示队列长度)
方案三:
队满条件:(front==rear && tag==1)
队空条件:(front==rear && tag==0)
知识回顾与重要考点:
3.2.3 队列的链式实现
队列的链式实现
(与单链表相比,多了一个尾结点指针,有一说一,我感觉其他的就没有东西了)
初始化(带头结点):
入队(带头结点):
入队(不带头结点):
出队(带头结点):
出队(不带头结点):
队列满的条件:
顺序存储需要关心队列已满,而链式存储是时无需关心的。
知识回顾与重要考点: