C 编程中的队列

问题描述 投票:0回答:1

这是问题的陈述(C 编程): 众包系统是一个网络平台,通过该平台可以提供各种类型的微任务,例如标记图像、注释文本片段、翻译部分文档或转录简短的音频剪辑,供用户执行,并获得经济补偿。

想象一个严格按照“先到先服务”制度运行的众包系统。该系统的用户可以选择分配在平台上停留时间最长的任务(无论其类型),或者他们可以更喜欢进行图像标记或文档翻译,系统将为他们分配该类型的任务是在平台上停留时间最长的。在任何情况下,他们都无法选择要执行的确切任务。

通过开发 enqueueTask、dequeueTask、dequeueTranslation、dequeueLabeling 等操作,以伪代码实现允许操作系统的数据结构。考虑没有用户选择类型的任务的情况。

假设队列容量无限,并且存在一个队列结构,其基本操作(init_queue、enqueue、dequeue、is_empty、first)已经实现,可以直接使用。表示具有两部分结构的任务,一个字符串类型变量用于存储任务名称,另一个长整型变量用于存储指示任务创建日期和时间的数字时间戳。

我尝试首先创建一个包含任务名称和时间戳的结构。 我不知道如何创建一个队列来区分这些任务类型。

c data-structures queue user-input
1个回答
0
投票

你基本上需要两个队列。第一个队列将存储所有内容,我们将其称为主队列,第二个队列将仅存储“图像标记”和“文档翻译”任务。我不清楚这些任务是如何创建的,但让我们保持不可知论,并说它们是以某种方式创建的,因为任务不太清楚这些任务的起源。

现在,每当创建一个任务时,无论它是什么类型,我们都会将该任务推送到主队列,新任务将添加到该行的末尾。

如果这个新任务是我们的两个特殊任务之一,即图像标记或文档翻译,那么我们也将这个任务推回到第二个队列。

我们为所有任务分配一个 id,该 id 不断增加。因此,每当有人选择执行图像标记或文档翻译任务时,我们就会从第二个队列中弹出并处理它。

否则,如果用户选择从主队列执行任务,那么我们有两种情况:

  • 弹出的主任务的头部不是图像标注或文档翻译:在这种情况下我们简单地处理这个任务
  • 或者,主要任务的头部要么是图像标注,要么是文档翻译。在这种情况下,我们比较从主队列中弹出的项目的 id,我们有两种情况:
      1. 主队列位于辅助队列后面,在这种情况下,我们忽略当前项目并弹出下一个并再次继续此算法
      1. 主队列与辅助队列同步,在这种情况下我们只需要确保任务从两个队列中弹出

如果我们在主队列的头部有一系列特殊图像标记或文档翻译性质的任务并且主队列正在被选择,那么我们弹出头部并忽略它,直到我们到达非特殊任务,或者队列为空或者两个队列在特殊任务方面是同步的。

© www.soinside.com 2019 - 2024. All rights reserved.