#include<stdio.h>
#include<malloc.h>
typedef struct Queue{
int * pBase; //数组
int front;
int rear;
}QUEUE, * PQUEUE;
void init(PQUEUE);//初始化
bool full_queue(PQUEUE);//是否已满
bool en_queue(PQUEUE,int);//入队
bool out_queue(PQUEUE,int *);//出队
void traverse(PQUEUE);//遍历
bool empty_queue(PQUEUE); //是否为空
int main(void){
QUEUE Q;
init(&Q);
en_queue(&Q,1);
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);
en_queue(&Q,5);
en_queue(&Q,6);
en_queue(&Q,7);
traverse(&Q);
int val;
bool out_flag= out_queue(&Q,&val);
if(out_flag){
printf("出栈成功,出栈的元素是%d\n",val);
}
return 0;
}
//初始化,假设数组的长度是6
void init(PQUEUE pQ){
pQ->pBase=(int *)malloc(sizeof(int)*6); //分配数组
pQ->front=0; //将front和rear都指向0;
pQ->rear=0;
}
// 入队
//两步完成:
// 1 .将值存入rear代表的位置
// 2.将 rear的值变成(rear+1)%数组的长度 (这样就可以循环)
bool en_queue(PQUEUE pQ,int val){
if(full_queue(pQ)){
printf("入队失败,队列已满\n");
return false;
}else{
pQ->pBase[pQ->rear]=val; //1 .将值存入rear代表的位置
pQ->rear=(pQ->rear+1)%6; //2.将 rear的值变成(rear+1)%数组的长度 (这样就可以循环)
return true;
}
}
//出队
//保存出队的值
// 将front的值变成(front+1)%数组的长度
bool out_queue(PQUEUE pQ,int * pVal){
if(empty_queue(pQ)){
//printf("队列空,出队失败!\n");
return false;
}else{
*pVal=pQ->pBase[pQ->front];//先保存值
pQ->front=(pQ->front+1)%6; //将front向后移动一位
return true;
}
}
//遍历队列
void traverse(PQUEUE pQ){
int i=pQ->front; //定义一个临时变量,当临时变量不等于rear时说明有元素,循环输出
int j=0;
while(i!=pQ->rear){
j++;
printf("第%d个元素是%d\n",j,pQ->pBase[i]); //pQ->pBase[rear]不能输出,因为规定空一个元素,rear
//指向的就是空的元素
i=(i+1)%6; //i递增
}
return;
}
//判断队列是否为空
bool empty_queue(PQUEUE pQ){
if(pQ->front==pQ->rear){
return true;
}else{
return false;
}
}
//判断队列是否已满
//当(rear+1)%数组的长度=front时,队列就满了
bool full_queue(PQUEUE pQ){
if((pQ->rear+1)%6==pQ->front){
return true;
}else{
return false;
}
}
/*
程序运行结果
入队失败,队列已满
入队失败,队列已满
第1个元素是1
第2个元素是2
第3个元素是3
第4个元素是4
第5个元素是5
出栈成功,出栈的元素是1
*/
循环队列演示
最新推荐文章于 2024-05-13 14:00:34 发布