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

C语言如何从队列中出队最小元素并正确调整front和rear指针

问题解决

现有代码待修正点

  • 函数声明不匹配:头部声明的void deQueue();和实现的int返回值冲突,需修改为int deQueue();
  • 依赖头文件缺失:调用exit()函数需要引入<stdlib.h>头文件,否则编译会报错
  • 最小元素检索逻辑缺陷:
    • min初始值应设为front而非0,否则会检索到队列有效范围外的无效数据
    • 循环遍历范围需覆盖到rear位置,原条件i < rear会漏掉队尾元素,应改为i <= rear

删除最小元素后的指针处理逻辑

找到最小元素的索引min后,按以下步骤操作即可:

  1. 把min + 1到rear区间的所有元素依次向前移动一位,覆盖掉min位置的元素,完成删除操作
  2. 队尾指针rear自减1,对应队列元素总数减1
  3. 空队列判断:如果更新后rear < front,说明队列已无有效元素,将front和rear都重置为初始值-1

修正后的deQueue函数代码

int deQueue() {
  if (front == -1)
    exit(1);
  else {
    // 修正最小元素检索逻辑
    int min = front;
    for(int i = front; i <= rear; i++){
        if(items[min] > items[i])
           min = i;
    }
    int value = items[min];

    // 移动元素覆盖待删除位置
    for(int i = min; i < rear; i++){
        items[i] = items[i + 1];
    }
    // 更新队尾指针
    rear--;
    // 空队列重置
    if(rear < front){
        front = -1;
        rear = -1;
    }

    return value;
  }
}

按你的测试用例执行后,输出结果为Deleted value is 1,符合预期,剩下的队列元素为3、5、4、2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:10