#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Queue{ //队列的结构 由头指针pBase(就像是个数组名,代表着数组的首地址)和front rear组成。
int *pBase;
int front;
int rear;
}QUEUE ;
void init(QUEUE *pQ);
void add(QUEUE *pQ,int val);
void list(QUEUE *pQ);
bool fullQueue(QUEUE *pQ);
bool empty(QUEUE *pQ);
void out(QUEUE *pQ,int *var);
int main(){
QUEUE Q; //声明一个队列Q
int var;
init(&Q); //初始化一个队列 传入地址参数
add(&Q,1); //入队
add(&Q,2);
add(&Q,3);
add(&Q,4);
add(&Q,5);
list(&Q); //遍历
out(&Q,&var); //出队
printf("出队的值为:%d\n",var);
list(&Q);
}
void init(QUEUE *pQ){
pQ->pBase=(int *)malloc(sizeof(QUEUE)*6);//分配6个单元的数组空间给pBase, pBase即数组名 也是数组的首地址。
pQ->front=0;//空队列的front和rear都为0
pQ->rear=0;
}
void add(QUEUE *pQ,int val){
if(fullQueue(pQ)){
printf("队列已满,入队失败!\n");
}
else {
pQ->pBase[pQ->rear] =val;
pQ->rear=(pQ->rear+1)%6; //入队rear+1取余 front不变
}
}
void out(QUEUE *pQ,int *var){
if(empty(pQ)){
printf("空队列,出队失败!\n");
}
else{
*var=pQ->pBase[pQ->front];
pQ->front=(pQ->front+1)%6; //出队 front+1取余 rear不变
}
}
bool fullQueue(QUEUE *pQ){ //判断队列是否已满 采用分配6个单元 只能放5个数据的方法,当front和rear相邻时 判断 队列已满。
if((pQ->rear+1)%6==(pQ->front))
return true;
else return false;
}
void list(QUEUE *pQ){
int i=pQ->front;
while(i<pQ->rear){
printf("%d",pQ->pBase[i]);
i=(i+1)%6;
}
printf("\n");
}
bool empty(QUEUE *pQ){
if(pQ->front==pQ->rear)//front=rear 即为空队列
return true;
else return false;
}
数据结构——队列
最新推荐文章于 2023-08-23 10:57:55 发布