You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

队列实现异常: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;
}

额外优化说明

  1. 在队列满的判断分支添加return,防止后续代码执行导致数组越界
  2. 给所有cout输出添加endl,让提示信息和数据输出更清晰

内容的提问来源于stack exchange,提问作者MAK136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:15:45