队列定义
对于一个存取的n个内容,最先进入的最先出去(First In,First Out:FIFO),即称为队列.
比如,食堂排队,最先去的,最先得到饭菜;
关键步骤:入队出队
代码实现
//循环队列 顺序表实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//定义队列结构
typedef struct _Queue Queue;
struct _Queue{
int *arr;
int Front,Rear;
int MaxSize;
};
//创建队列
Queue * creatQueue(int MaxSize){
Queue * queue=(Queue *)malloc(sizeof(Queue));
queue->arr=(int *)malloc(MaxSize* sizeof(int));
queue->Front=queue->Rear=-1;
queue->MaxSize=MaxSize;
return queue;
}
//若队尾指针自增取模为队首指针,则队列已满
bool isFull(Queue * queue){
return ((queue->Rear+1)%queue->MaxSize==queue->Front);
}
//若队首指针等于队尾指针,则队列为空
bool isEmpty(Queue * queue){
return (queue->Front==queue->Rear);
}
//入队:若队列未满,进行插入操作
bool addQueue(Queue * queue,int num){
if(isFull(queue)){
return false;
}
else{
queue->arr[(++queue->Rear)%queue->MaxSize]=num;
//queue->Rear=(queue->Rear+1)%queue->MaxSize;
//queue->arr[queue->Rear]=num;
return true;
}
}
//出队:若队列不为空,进行出队操作
int DeleteQ(Queue * queue){
if(isEmpty(queue)){
return NULL;
}
else{
return queue->arr[(++queue->Front)%queue->MaxSize];
//queue->Front=(queue->Front+1)%queue->MaxSize;
//return queue->arr[queue->Front];
}
}
int main() {
Queue * queue=creatQueue(10);
for(int i=0;i<10;i++){
addQueue(queue,i);
}
for(int i=0;i<10;i++){
printf("%d\t",DeleteQ(queue));
}
return 0;
}