#include <stdio.h>
#include <malloc.h>
typedef struct node{
int data;
struct node *next;
}QNode;//循环链队列节点的类型
typedef struct{
QNode *rear;
}LQueue;
LQueue* init_LQueue();//创建并初始化循环链队列
int Empty_LQueue(LQueue *q);//判空
int in_LQueue(LQueue *q,int x);//入队
int out_LQueue(LQueue *q);//出队
int length_LQueue(LQueue *q);//求队列的长度
void print_LQueue(LQueue *q);//输出队列中的所有元素
int main(){
LQueue *q;
int x,n,i;
q = init_LQueue();
printf("请输入要入队的元素:");
while((x = getchar()) != '\n'){
in_LQueue(q,x);
}
print_LQueue(q);
printf("当前队的长度为:%d",length_LQueue(q));
printf("请输入出队元素的个数:(不得大于%d)",length_LQueue(q));
fflush(stdin);
n = getchar();
for(i = 0;i < n;i++){
out_LQueue(q);
}
print_LQueue(q);
printf("当前队的长度为:%d",length_LQueue(q));
return 0;
}
//创建循环链队列
LQueue* init_LQueue(){
LQueue *q = (LQueue*)malloc(sizeof(LQueue));
if(q != NULL){
q->rear->next = q->rear;
}
return q;
}
//判空
int Empty_LQueue(LQueue *q){
if(q->rear->next == NULL)
return 1;
else
return 0;
}
//入队
int in_LQueue(LQueue *q,int x){
QNode *p;
p = (QNode*)malloc(sizeof(QNode));
p->data = x;
p->next = q->rear->next;
q->rear->next = p;
q->rear = p;
return 1;
}
//出队
int out_LQueue(LQueue *q){
QNode *p;
int judge = Empty_LQueue(q);
if(judge == 1){
printf("队列已空");
return 0;
}
else{
p = q->rear->next;
// *x = p->data;
q->rear->next = p->next;
free(p);
return 1;
}
}
//求队列长度
int length_LQueue(LQueue *q){
int length = 0;
QNode *t;
t = (QNode*)malloc(sizeof(QNode));
while(t != q->rear){
length++;
t = t->next;
}
return length;
}
//输出队列中所有元素
void print_LQueue(LQueue *q){
QNode *p;
p = (QNode*)malloc(sizeof(QNode));
printf("当前队列中所有元素为:\n");
while(p != q->rear){
printf("%d ",p->data);
}
}
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
初始化循环链队列好像不会,但编译器没有报错,程序不运行直接结束
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
【以下回答由 GPT 生成】
首先,请注意,你在初始化循环链队列函数
init_LQueue()
中存在一个错误。在init_LQueue()
函数中,你没有为q->rear
分配内存空间。这导致了运行时错误。在初始化队列之前,需要先为q->rear
分配内存空间。你可以通过以下方式修复它:LQueue* init_LQueue(){ LQueue *q = (LQueue*)malloc(sizeof(LQueue)); if(q != NULL){ q->rear = (QNode*)malloc(sizeof(QNode)); q->rear->next = q->rear; } return q; }
另外,你在
main()
函数中读取出队元素个数时使用了getchar()
函数,这无法读取到多个数字。你可以使用scanf()
函数来解决这个问题。将main()
函数中获取n
的部分修改为以下代码可以实现该功能:scanf("%d", &n);
以上是你代码中的错误和需要修改的部分。修复这些错误后,你的代码应该可以正确运行了。下面是完整的修复代码:
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }QNode;//循环链队列节点的类型 typedef struct{ QNode *rear; }LQueue; LQueue* init_LQueue();//创建并初始化循环链队列 int Empty_LQueue(LQueue *q);//判空 int in_LQueue(LQueue *q, int x);//入队 int out_LQueue(LQueue *q);//出队 int length_LQueue(LQueue *q);//求队列的长度 void print_LQueue(LQueue *q);//输出队列中的所有元素 int main(){ LQueue *q; int x, n, i; q = init_LQueue(); printf("请输入要入队的元素:"); while((x = getchar()) != '\n'){ in_LQueue(q,x); } print_LQueue(q); printf("当前队的长度为:%d\n",length_LQueue(q)); printf("请输入出队元素的个数:(不得大于%d)",length_LQueue(q)); scanf("%d", &n); for(i = 0; i < n; i++){ out_LQueue(q); } print_LQueue(q); printf("当前队的长度为:%d\n",length_LQueue(q)); return 0; } //创建循环链队列 LQueue* init_LQueue(){ LQueue *q = (LQueue*)malloc(sizeof(LQueue)); if(q != NULL){ q->rear = (QNode*)malloc(sizeof(QNode)); q->rear->next = q->rear; } return q; } //判空 int Empty_LQueue(LQueue *q){ if(q->rear == q->rear->next) return 1; else return 0; } //入队 int in_LQueue(LQueue *q, int x){ QNode *p = (QNode*)malloc(sizeof(QNode)); if(p == NULL) return 0; else{ p->data = x; p->next = q->rear->next; q->rear->next = p; q->rear = p; return 1; } } //出队 int out_LQueue(LQueue *q){ if(Empty_LQueue(q)) return 0; else{ QNode *p = q->rear->next->next; q->rear->next->next = p->next; if(q->rear == p){ q->rear = q->rear->next; } free(p); return 1; } } //求队列的长度 int length_LQueue(LQueue *q){ int i = 0; QNode *p = q->rear->next->next; while(p != q->rear->next){ p = p->next; i++; } return i; } //输出队列中的所有元素 void print_LQueue(LQueue *q){ QNode *p = q->rear->next->next; while(p != q->rear->next){ printf("%d ", p->data); p = p->next; } printf("\n"); }
这样修改后,你应该可以得到预期的结果了。希望这能帮到你!
【相关推荐】
- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7572925
- 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:读入字符时往往会多一个回车,如何解决
- 您还可以看一下 陈槐老师的零基础新手入门软件测试必知必会课程中的 软件测试之安全测试小节, 巩固相关知识点
- 除此之外, 这篇博客: 操作符知识你会了,那表达式求值呢?中的 ✍表达式求值 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥20 Html备忘录页面制作
- ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
- ¥20 数学建模来解决我这个问题
- ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
- ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
- ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
- ¥30 NIRfast软件使用指导
- ¥20 matlab仿真问题,求功率谱密度
- ¥15 求micropython modbus-RTU 从机的代码或库?
- ¥15 django5安装失败