【队列】只允许在两端进行操作的线性表,允许出队的一端叫队头,
允许入队的一端叫队尾,由于队列只允许在两端进行操作,队列的
特点是先进先出(FIFO\LILO)
队列操作:
1.创建队列
2.入队
3.判断队列是否为满(顺序结构)
4.队列是否存在
5.遍历队列
6.判断队列是否为空
7.出队
8.清空队列
9.销毁
【顺序队列】顺序存储的队列,又叫循环队列,对于队列来说先进先出,
顺序队列通过队尾入队,队头出队,当队尾元素到最大下标位置时
无法再入队,否则会出现内存溢出,这里叫“假溢出”,队头出队,
出队后队列前面有可用空间但是无法利用,这就是“假溢出”,
为了解决假溢出的现象,我们采用“变量+1再%数组最大长度”的方式
去进行运算
这里我们定义两个变量:front和rear,若front标识队头,reat
标识队尾,最开始队列为空时rear==front,队列有一个元素时
rear==front,这是无法判断队列是空还是有一个元素,为了解决
这个问题,我们在这里做了规定,俩个规定任选其一即可:
1.让front作为队头元素前一个位置的下标,rear作为
队尾元素的下标。
2.让front作为队头元素下标,rear作为队尾元素后一个位置的
下标
队列结构体:
struct queue
{
int front;//标识队头前一个位置的下标
int rear;//标识队尾元素的下标
datatype * data;//指向队列空间首地址的指针
};
【链式队列】链式存储的队列,需要定义两个指针分别指向队列
的头节点和尾节点,头节点不存放数据,第一个有效节点为头节点
下一个节点
队列节点结构体的构建
struct node
{
datatype data;//数据域
struct node *next;//指针域
};
//构建指针结构体:
struct point
{
struct node *front;
struct node *rear;
};