#include <string.h> //导入头文件
#include <stdio.h> //导入头文件
#include <stdlib.h>
#include <time.h> //导入头文件
#define MAXSIZE 50
typedef struct Queue * CirQueue; //定义一个结构体指针
struct Queue
{
int front; //队头
int rear; //队尾
int data[MAXSIZE];//数据
};
//队列的创建
CirQueue Create()
{
CirQueue Cq=(CirQueue)malloc(sizeof(struct Queue)); //用malloc函数为队列在堆上申请空间
Cq->front = Cq->rear = -1; //数组没数据,用-1标记
memset(Cq->data,0,MAXSIZE*sizeof(int)); //为队列元素申请内存空间
return Cq; //返回Sq的值
}
//队列的长度
int getLength(CirQueue Cq)
{
return (Cq->rear+MAXSIZE-Cq->front)%MAXSIZE; //队列长度是队头队尾之差,队尾减队头
}
//判断队列是否为空
int IsEmpty(CirQueue Cq)
{
if(Cq->front = Cq->rear) //判断队列是否为空的条件:队头是否等于队尾
{
return 1; //如果队列为空则返回1
}
return 0; //如果队列不为空则返回0
}
void Insert(CirQueue Cq,int val)//入队
{
if ((Cq->rear + 1) % MAXSIZE == Cq->front)
{
printf("队列已满,无法再插入元素!\n");//打印错误提示
return;//返回
}
if (IsEmpty(Cq))//如果队列为空
{
Cq->front = Cq->rear = 0;//先让front和rear都等于0 插入后rear++
Cq->data[Cq->rear] = val;//将val赋值
Cq->rear++;//rear自增
}
else
{
Cq->data[Cq->rear] = val;
Cq->rear = (Cq->rear + 1) % MAXSIZE;
}
}
int Del(CirQueue Cq) //出队
{
if(IsEmpty(Cq))
{
printf("队列为空,无元素可出队!\n");
return 0;
}
int temp = Cq->data[Cq->front];
Cq->front = (Cq->rear+1)% MAXSIZE;
return temp;
}
//获得队头
int GetHead(CirQueue Cq)
{
//空队列
if(Cq->front == Cq->rear)
{
printf("队列为空,无元素可取!\n"); //如果为空队列,则打印队列为空,无元素可取!
return 10000; //返回错误标志
}
//获取元素
return Cq->data[Cq->front]; //返回队头元素
}
//清空
void Clear(CirQueue Cq)
{
Cq->front = Cq->rear = -1; //
printf("队列已清空!\n"); //打印队列已清空
}
//销毁
void Destroy(CirQueue Cq)
{
free(Cq); //用free函数释放队列
printf("队列已销毁!\n"); //打印队列已销毁
}
int main()
{
CirQueue Cq = Create(); //创建队列
srand((unsigned)time(0)); //随机生成数
int i = 0; //定义一个i,赋初值为0
for(i; i<10 ; ++i) //执行for循环
{
Insert(Cq,rand()%100); //将随机产生的数入队列
}
printf("队列长度:%d\n",getLength(Cq)); //用getLength函数计算队列的长度
printf("队头元素 出队元素\n"); //打印队头元素,出队元素
while(getLength(Cq)>0) //出队列,循环条件是队列不为空
{
int ret = GetHead(Cq); //获取队头元素
printf("%d",ret); //打印队内元素
ret = Del(Cq); //出队列
printf("%d \n",ret); //打印删除的元素
}
Clear(Cq); //清空栈
Destroy(Cq); //销毁栈
system("pause"); //结束函数
return 0;
}
【数据结构】循环队列为什么运行错误
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- cpp_learners 2021-04-13 08:29关注
小问题:
问题一:
判断队列是否为空中,if(Cq->front = Cq->rear);使用了赋值号,把该改成等号运算符就行。if (Cq->front == Cq->rear)
问题二:
出队 函数中,Cq->front = (Cq->rear+1)% MAXSIZE;使用了队尾,把它改成队头就行。Cq->front = (Cq->front + 1) % MAXSIZE;
如果问题解决,点个采纳吧!
解决 无用评论 打赏 举报
悬赏问题
- ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
- ¥15 FileNotFoundError 解决方案
- ¥15 uniapp实现如下图的图表功能
- ¥15 u-subsection如何修改相邻两个节点样式
- ¥30 vs2010开发 WFP(windows filtering platform)
- ¥15 服务端控制goose报文控制块的发布问题
- ¥15 学习指导与未来导向啊
- ¥15 求多普勒频移瞬时表达式
- ¥15 如果要做一个老年人平板有哪些需求
- ¥15 k8s生产配置推荐配置及部署方案