0

我有一个结构向量,结构看起来像这样:

struct myData{
    int ID;
    int arrivalTime;
    int burstTime;
};

用这些数据填充我的向量后:

1 5 16
4 7 12
3 12 4
2 7 8

其中每一行是单个结构的 ID(任意,不表示到达顺序)、到达时间和突发时间,我将如何使用“for”或“while”循环来逐步遍历我的向量的索引并以某种方式计算数据我可以打印出这样的东西吗?

Time 0  Processor is Idle
Time 5 Process 1 starts running
Time 21 Process 2 is running
Time 29 Process 4 is running
Time 41 Process 3 is running

我认为我可以做到的方式是让一个整数跟踪当前时间(当前时间是已经运行的进程的突发时间的总和),但我似乎无法找出一个算法考虑空闲时间(当处理器没有做任何事情并且新任务尚未到达时)以及跟踪其他数字。为简单起见,我只是决定当两个进程同时到达时,我将处理 ID 号较低的那个。我知道我没有在这里放太多代码来演示我正在尝试做的事情,但我希望我已经相当清楚地解释了它。我正在寻找这个问题的伪代码算法解决方案,但我不会拒绝已经编码的东西(在 C++ 中?)。

作为附加说明,如果我无法清楚地传达我如何访问我的数据,则:

cout << structVector[0].ID << "\n";
cout << structVector[0].arrivalTime << "\n";
cout << structVector[0].burstTime << "\n";

会打印出来

1
5
16

任何对伪代码或实际代码的帮助将不胜感激!!!多次阅读这篇文章后,我意识到我对这个问题非常笼统,但我希望能得到一些帮助,只是了解如何计算这些数据。

4

1 回答 1

1

首先,根据到达时间对向量进行排序。然后以下代码将完成您正在寻找的内容。

int i = 0, time = 0;

while (i < vec.size())
{
if (vec[i]. arrivalTime > time)
cout << "Time " << time << "process is idle";

time += vec[i].arrivalTime;
cout << "Time " << time << " Process " << vec[i].ID << " is running" << endl;

time += vec[i].burstTime;

i++;
}
于 2012-10-07T10:47:54.927 回答