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

文档管理系统队列与栈交互异常:入队数据异常存入栈求助

文档管理系统队列Bug修复

问题现象

  • 入队3个文档后执行3次出队操作,数据正常存入栈,第4次出队提示队列为空,逻辑正常;
  • 队列空后再次入队时,新文档未进入队列,反而会删除栈顶下方的所有元素并添加到栈顶下方,后续每次入队的数据都持续存入栈,队列始终为空。

Bug原因分析

问题出在dequeue函数中:当队列的最后一个元素被出队时,仅将q->front设为NULL,但未同步更新q->rear为NULL。此时q->rear仍指向已被出队并移入栈中的节点,后续调用enqueue时,判断条件q->front == NULL && q->rear == NULL不成立,代码会执行q->rear->next = temp,将新节点挂载到栈顶节点的next指针上,同时更新q->rear为新节点,导致新元素直接进入栈结构,队列的front始终为NULL,表现为队列一直为空。

修复方案

修改dequeue函数,当出队后队列为空时,同步将q->rear设为NULL:

doc* dequeue(queue *q)
{
    if(q->front == NULL)
    {
        printf("Queue is empty!\n");
        system("pause");
        return NULL;
    }

    doc *temp;
    temp = q->front;
    q->front = temp->next;

    // 新增:队列空时同步重置rear指针
    if(q->front == NULL)
    {
        q->rear = NULL;
    }

    temp->next = NULL;

    return temp;
}

修复后验证

队列清空后再次入队,新元素会正常加入队列,栈的原有数据不会被篡改,队列与栈的逻辑恢复正常。

内容的提问来源于stack exchange,提问作者Md. Nawshin Zaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:20:54