队列实现异常:enqueue函数无法正确接收传入参数值
队列程序enqueue存垃圾值的问题修复
核心错误定位
你的代码里enqueue函数存在运算符误用的致命问题:
- 你写了
arr[rear] == x;,这是相等比较运算符,仅用来判断两边值是否相等,不会把x的值存入数组,导致数组元素保留未初始化的垃圾值。 - 正确写法应该是赋值运算符:
arr[rear] = x;
修正后的完整代码
#include <bits/stdc++.h> #include <climits> using namespace std; struct Queue{ int *arr; int front , rear; int cap; Queue(int c){ cap = c; front = -1; rear = -1; arr = new int[cap]; } void enqueue(int x){ if(rear == cap-1){ cout<<"The array is full"<<endl; return; // 队列满时终止函数,避免数组越界 } rear++; arr[rear] = x; // 替换为赋值运算符,完成值的存入 cout<<arr[rear]<<endl; if(front == -1){ front = 0; } } int dequeue(){ int data; if(front == -1){ cout<<"Array is empty"<<endl; return INT_MIN; } data = arr[front]; arr[front] = 0; if(front == rear){ front = rear = -1; } else{ front++; } return data; } }; int main() { Queue q(3); q.enqueue(24); q.enqueue(30); q.enqueue(42); cout<<q.dequeue()<<endl; return 0; }
额外优化说明
- 在队列满的判断分支添加
return,防止后续代码执行导致数组越界 - 给所有
cout输出添加endl,让提示信息和数据输出更清晰
内容的提问来源于stack exchange,提问作者MAK136
相关产品推荐
相关产品推荐

