第十题 - 数据结构(队列) - 合并两个队列
本节目录
题目要求
将两个任务队列(例如运行队列)合并在一起,这在多核处理器中尤为常见,当某个处理器的任务队列需要与另一个处理器的任务队列合并时,可以使用这一操作。
你需要实现一个函数 merge_task_queues,该函数用于合并两个已经排序的任务队列。每个任务队列由 TaskNode 结构体表示,任务队列按任务 ID (task_id) 从小到大排序。合并后的任务队列也需要保持有序。
示例
假设我们有两个任务队列:
队列 A:1 -> 3 -> 5
队列 B:2 -> 4 -> 6
调用 merge_task_queues(A, B) 后,返回的新队列应该是:
合并后的队列:1 -> 2 -> 3 -> 4 -> 5 -> 6
输入
一组任务 id 组成的的队列,由 , 分割,比如 1,3,5。
另一组任务 id 组成的的队列,由 , 分割,比如 2,4,6。
输出
打印合并后的任务队列:
Merged Queue: 1 2 3 4 5 6
已有代码介绍
任务队列的节点由以下结构体表示:
typedef struct TaskNode {
int task_id;
struct TaskNode *next;
} TaskNode;
提示
- 初始的任务队列已经安装升序排序完毕,合并后的队列也要以升序排列。
- 在原地操作即可,不需要申请新的内存空间。
- 同时遍历两个队列,不断选出最小的任务 id,然后将其插入到新队列的末尾。
注意事项
记得判断退出了 while 循环后,是否仍然有非空队列,如果有,则应该进一步合并。