【发布时间】:2021-01-29 18:00:25
【问题描述】:
我有一个包含 n 个进程的链表,这些进程按优先级降序排序以运行。因此,第一个进程,即链表的第一个节点具有最高优先级,然后是第二个节点,依此类推。 有一次我只能运行 8 个进程。我想要做的是我想要 6 个最高优先级和 2 个最低优先级同时运行。
我所做的是我重新排列了链表,其中前六个节点将具有最高优先级,接下来的两个节点将具有最低优先级。然后再有 6 个高优先级节点和 2 个低优先级节点并重复此操作,直到覆盖所有节点。但这并不能满足我的要求,即如果 6 个最高优先级进程中的任何一个结束,那么另一个高优先级进程应该取代它,如果低优先级进程结束,那么低优先级进程可能会取代它。
我该如何实现呢? (这也是我的第一个问题,所以如果我提出问题的方式有任何问题,请指出)
【问题讨论】:
-
为什么不使用一个双向链表,你可以从前面向前遍历,从后面向后遍历?
-
这个列表有多动态?是不是在处理其他节点时,新节点被插入到列表中的任何位置?可以改变已经在列表中的节点的优先级吗?如果出现更好的候选人,是否应该中断处理,还是您总是会完成您开始的工作?您需要线程安全,还是所有事情都由单个线程处理?
-
列表已创建并作为单链表提供给您。最初创建此列表后,将不再添加任何进程。处理过程中不会进一步更改优先级。
-
@Ian Abbott 我使用了双向链表,我的大部分要求都得到了满足。谢谢!
标签: c data-structures linked-list