一、队列的特点
先进先出 后进后出
由下面的图可以看出队列的特点
二、队列的顺序存储
顺序队列是队列的顺序存储结构,顺序队列实际上是运算受限的顺序表。和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应设置为0。
三、队列的基础代码
(1)队列的结构体
typedef sturct Queue{
int data[MAX]; //顺序存储 数组模拟的队列
int size; //队列的大小(队列中元素的个数)
}Queue,*SeqQueue;
(2)队列的初始化(数组头做队头,数组尾做队尾)
SeqQueue init(){
//申请队列空间,即数组空间
SeqQueue p = (Queue *)malloc(sizeof(Queue));
if(p == NULL){
return NULL;
}
//初始化 队列大小
p->size = 0;
for(int i = 0; i< MAX;i++){
p->data[i] = 0;
}
return p;
}
(3)入队
void push(SeqQueue p , int value){
if(p == NULL){
return;
}
if(p->size == MAX){
printf("队列元素已满!\n");
return;
}
//进队
p->data[p->size] = value;
//改变队列元素个数
p->size++;
}
队列的入队可以由下图可以看的出
(4)出队
void push(SeqQueue p , int value){
if(p == NULL){
return;
}
if(p->size == MAX){
printf("队列元素已空!\n");
return;
}
//出队 删除数组首元素
for(int i=0;i<p->size-1;i++){
p->data[i] = p->data[i+1];
}
//改变队列元素个数
p->size--;
}
注意:要记得,看到循环里边有i+1的时候,要改变 最终值
队列的出栈可以由下图看出
四、队列示意图