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

队列工作原理、代码中FIFO图制作及优先级队列实现咨询

队列工作原理解析

基础队列核心逻辑

队列是**先进先出(FIFO)**的数据结构,核心规则是:最早进入队列的元素最先被处理,新元素只能添加到队列尾部,就像日常排队结账的场景。

代码中的队列结构实现

代码通过三个结构体协作完成队列的定义:

// 存储单个任务的描述与优先级
struct job {
 char description[10];
 int priority;
};

// 队列节点:用于串联任务,每个节点包含一个任务和指向下一节点的指针
struct node {
 struct job job;
 struct node* next;
};

// 队列管理器:通过队头(front)和队尾(end)指针,实现快速入队/访问队头
struct queue {
 struct node* front;
 struct node* end;
};

核心入队操作(enqueue)

入队是向队列添加元素的操作,严格遵循FIFO规则:

void enqueue(struct queue* queue, struct job* job) {
 struct node* temp = (struct node*)malloc(sizeof(struct node));
 temp->job = *job;
 temp->next = NULL;

 // 空队列时,新节点同时成为队头和队尾
 if (queue->end == NULL) {
 queue->front = queue->end = temp;
 return;
 }

 // 非空队列时,将新节点追加到队尾,更新队尾指针
 queue->end->next = temp;
 queue->end = temp;
}
  • 空队列状态:队头和队尾指针都指向NULL,添加第一个节点时,两个指针同时指向新节点
  • 非空队列状态:先让当前队尾节点的next指向新节点,再把队尾指针移到新节点,保证新元素始终在队尾

FIFO队列的可视化制作方式

要绘制FIFO队列的变化图,只需跟踪front、end指针以及节点间的next链接,用ASCII图就能清晰展示:

以优先级1的队列(任务ABC、DEF、GHI依次入队)为例

  1. 初始空队列
    Q1: front → NULL
        end   → NULL
    
  2. 添加第一个任务ABC
    Q1: front → [ABC, 1] → NULL
        end   → [ABC, 1]
    
  3. 添加第二个任务DEF
    Q1: front → [ABC, 1] → [DEF, 1] → NULL
        end   → [DEF, 1]
    
  4. 添加第三个任务GHI
    Q1: front → [ABC, 1] → [DEF, 1] → [GHI, 1] → NULL
        end   → [GHI, 1]
    

画图要点

  • 用方框代表struct node,内部标注任务的描述和优先级
  • 用箭头表示指针指向(包括front、end和next指针)
  • 每完成一次入队操作,更新箭头位置,就能直观体现FIFO的顺序特性

优先级队列的实现逻辑

这段代码采用多队列分组的方式实现优先级队列,核心思路是为每个优先级单独维护一个FIFO队列:

1. 队列初始化

创建与优先级数量(这里是4个,对应优先级1-4)相等的队列,存储在数组queues中。由于数组索引从0开始,优先级1对应queues[0],优先级2对应queues[1],以此类推(代码中用jobs[i].priority - 1来匹配对应队列)。

2. 任务分配

遍历所有任务,根据任务的优先级值,将任务放入对应的队列:

  • 优先级1的任务进入queues[0]
  • 优先级2的任务进入queues[1]
  • 优先级3的任务进入queues[2]
  • 优先级4的任务进入queues[3]
    每个队列内部的任务严格遵循FIFO顺序,同优先级的任务按入队先后排列。

3. 优先级调度逻辑

处理任务时,按优先级从高到低(代码中是1到4)的顺序遍历队列:先处理完优先级1队列中的所有任务,再处理优先级2的队列,以此类推,实现高优先级任务优先执行的效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:52:03