队列的概念
队列,和栈一样,也是一种对数据的”存“和”取“有严格要求的线性存储结构
队列的特点
队列就跟咱们日常排队一样的道理,从一端进,从另一端出,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/09f532df1208db680af96272397b3486.png)
我们把进数据的一端称为”队尾“,出数据的一端称为”队头“;数据元素进队列的过程称为”入队(push)“,出队列的过程称为”出队(pop)“。
队列具有先进先出,后进后出的特点
队列存储结构的实现有两种方式:顺序队列和链式队列
队列的顺序存储代码
队列的结构体
typedef struct Queue{
int data[MAX]; //顺序存储 数组模拟的队列
int size; //队列的大小 (队列中元素个数)
}Queue,*SeqQueue;
对列的初始化
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;
}
入队
void push(SeqQueue p, int value){
if(p == NULL){ //队列
return;
}
if(p->size == MAX){
printf("队列元素已满!\n");
return;
}
//进队
p->data[p->size] == value;
//改变队列元素个数
p->size++;
}
出队
void pop(SeqQueue p){
if(p == NULL){ //队列
return;
}
if(p->size == 0){
printf("队列元素已空!\n");
return;
}
//出队 删除数组首元素
for(int i = 0; i < p->size-1; i++){
p->data[i]=p->data[i+1];
}
//改变队列元素个数
p->size++;
}
循环队列
概念:
存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。
//队满
front = (rear + 1)%n; //front 头 rear 尾
//队空
front = rear; //头指针 指向 尾指针 为空
以上呢,是关于我们队列的一些小知识!!!