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

基于数组的队列插入元素后无法显示正确值的原因排查

数组实现队列时插入元素后无法打印的问题分析与修复

核心错误点

  • 元素插入位置越界:
    你的insert函数中使用arr[rear++] = n,初始rear值为-1,后置自增会先将值写入arr[-1](数组下标越界,属于未定义行为),之后rear才变为0。这导致元素根本没存入数组的有效位置,后续自然无法打印。正确做法是用前置自增++rear,先把rear从-1变为0,再赋值给arr[0],确保下标合法。

  • 构造函数数组初始化越界:
    构造函数里的arr[MAX] = {0};是非法操作,数组arr的有效下标是0到MAX-1,arr[MAX]超出了数组边界,可能意外篡改其他成员变量的值(这很可能是你看到front=1、rear=0的原因)。

  • remove函数返回值不规范:
    返回NULL不合适,因为NULL是指针类型,而函数返回int,建议返回约定的无效值(比如-1)来表示队列空的情况。


修正后的完整代码

#include <iostream>
#define MAX 10

class queue
{
private:
    int rear;
    int front;
    int arr[MAX];
    int data;
    
public:
    // 用初始化列表正确初始化所有成员,包括数组
    queue() : rear(-1), front(-1), arr{0}, data(0) {}
    
    void insert(int n)
    {
        if (rear == MAX-1)
        {
            std::cout << "queue is full" << std::endl;
            return;
        }
        
        if(front == -1)
            front = 0;
            
        // 前置自增,确保下标有效
        arr[++rear] = n;
        
        // 增加空格分隔数值,便于查看
        std::cout << "front: " << front << ", rear: " << rear << " | 队列元素: ";
        for (int i = front; i <= rear; i++)
        {
            std::cout << arr[i] << " ";
        }
        
        std::cout << '\n';
    }
    
    int remove()
    {
        // 增加front > rear的判断,处理多次删除后队列空的情况
        if (front == -1 || front > rear)
        {
            std::cout << "queue is empty" << std::endl;
            return -1; // 用-1作为空队列的返回标记
        }
         
        data = arr[front];
        
        if (front == rear)
            front = rear = -1;   
        else
            front++;
            
        return data;        
    }
};

int main()
{
    queue q;
    
    q.insert(1);
    q.insert(2);
    q.remove();
    q.insert(3);
    
    return 0;
}

运行效果说明

执行后控制台输出:

front: 0, rear: 0 | 队列元素: 1 
front: 0, rear: 1 | 队列元素: 1 2 
front: 1, rear: 2 | 队列元素: 2 3 

完全符合队列先进先出的特性,插入的元素能被正常打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:24:52