经过五讲走来,我想大家一定大概清楚了,我们现在所学习的数据结构也是非常简单,无非就是数组的变化
今天讲解数组的最后一个变形——队列
队列就像排队一样,我们去排队,先来的先排队,后来的排在队尾,不允许插队,中途离开,否则那就是数组而不是队列
出队(队头,front),入队(队尾rear)记住英文,后续会用到
在顺序结构中,队列在内存中的存储都是连续的,相邻的物理单元,就是他们之间的逻辑关系,在初始化的时候,rear和front指针指向数组序号为-1的位置
a1---a2---a3---a4---a5---
例如front++,就是指向a1,rear通过5次自加指向a5,此时,front自加就是出队,rear自加,填入元素,就是入队
进队:rear++; queue[rear]='A'就完成了对A的入队
出队:front++就完成了B的出队,如果有必要,可以设置temp=queue[front]在此之前,来保存出队的数值
初始化:rear=front=-1
长度:rear-front
队空:rear==front
队满:rear-front==MaxSize
接下来我们来讲解一下链式存储,同样的通过malloc函数来进行分配地址空间
例如:
typedef struct node{
int data;
struck node *next;
}JD;
typedef JD * Link;
Link front=NULL;
Link rear=NULL;
初始化链式队列
最后还有一个小知识点,一般的你会发现队有进有出,数据出去了,原来的空间还在那里,会造成浪费
所以也不知道谁想起来把队列连成一个循环,就是到达一定程度,front++之后到达原来的尾部
但是判断空和判断满有冲突,所以,队列空出一个单元,用来区分队满和对空
对空:front==rear
队满:(rear++)%maxsize==front
这便是数据结构,后续我们还将讲解到树状的数据结构,不过由于之前的课程太快,我决定暂停新课,讲解一些代码来复习巩固,如果喜欢,请关注我