向循环队列插入数据时触发无限循环问题求助
循环队列插入无限循环问题的解决
核心问题根源
代码中错误使用逗号表达式,导致队列的rear指针未被正确初始化/修改,进而引发遍历阶段的无限循环。
具体错误与修正
插入函数的初始化错误
在insert函数的空队列初始化分支中,rear, front = 0;是错误写法。C语言中逗号运算符优先级最低,这行仅会将front设为0,rear仍保持初始值-1。插入第一个元素后,front=0而rear=-1,遍历函数中while(i != rear)的条件永远成立(i从0循环,永远无法等于-1),触发无限循环。
修正为:rear = 0; front = 0;删除函数的清空错误
delete函数中rear, front = -1;存在同样问题,仅会修改front,rear值不变,后续操作会导致队列状态混乱。
修正为:rear = -1; front = -1;
修正后的完整代码
#include <stdio.h> #define N 10 int queue[N]; int front = -1; int rear = -1; void insert(); void traverse(); void delete(); int main() { insert(); traverse(); delete(); return 0; } void insert() { int item; if ((rear + 1) % N == front) { printf("overflow"); } else if (front == -1 && rear == -1) { scanf("%d", &item); rear = 0; front = 0; queue[rear] = item; } else { scanf("%d", &item); rear = (rear + 1) % N; queue[rear] = item; } } void delete() { int item; if (rear == -1 && front == -1) { printf("underflow"); } else if (rear == front) { rear = -1; front = -1; } else { item = queue[front]; front = (front + 1) % N; } } void traverse() { int i = front; if (front == -1 && rear == -1) { printf("underflow"); } else { while (i != rear) { printf("%d ", queue[i]); i = (i + 1) % N; } printf("%d", queue[i]); } }
额外优化建议
- 遍历输出时添加空格分隔数值,提升可读性(已在修正代码中补充)。
- 可在
main函数中添加菜单逻辑,支持多次执行插入、遍历、删除操作,方便测试队列完整功能。
内容的提问来源于stack exchange,提问作者Partha
相关产品推荐
相关产品推荐

