int findrearlyjob(job jobs[],int count) { int rearlyloc=-1; int rearlyjob=-1; for(int i=0;i<count;i++) { if(rearlyloc==-1){ if(jobs[i].visited==0){ rearlyloc=i; rearlyjob=jobs[i].reach_time; } } else if(rearlyjob>jobs[i].reach_time&&jobs[i].visited==0) { rearlyjob=jobs[i].reach_time; rearlyloc=i; } } return rearlyloc; }解释代码
时间: 2024-04-04 10:31:01 浏览: 18
这段代码是一个函数,输入参数是一个 job 类型的数组和一个整数 count,函数的作用是在数组中找到一个尽可能早的未被访问的 job,然后返回它在数组中的下标。这个函数使用了一种简单的遍历算法,从数组的第一个元素开始遍历,如果找到一个未被访问的元素,则将其作为当前最早的元素。然后继续遍历数组中的其他元素,如果找到一个比当前最早元素更早的未被访问的元素,则更新最早元素的位置和时间。最终,函数返回最早元素的位置。注意,代码中使用了一个 visited 标志来判断一个元素是否被访问过。
相关问题
int findminjob(job jobs[],int count) { int minjob=-1;//=jobs[0].need_time; int minloc=-1; for(int i=0;i<count;i++) { if(minloc==-1){ if( jobs[i].isreached==true && jobs[i].visited==0){ minjob=jobs[i].need_time; minloc=i; } } else if(minjob>jobs[i].need_time&&jobs[i].visited==0&&jobs[i].isreached==true) { minjob=jobs[i].need_time; minloc=i; } } return minloc; }解释代码
这段代码是一个函数,函数名为`findminjob`,它接收两个参数:一个是类型为`job`的数组`jobs`,另一个是整型变量`count`,表示数组中元素的个数。函数的返回值是一个整型变量。
函数的作用是在`jobs`数组中找到一个还未被访问过的任务,并且该任务需要的时间最少。具体实现如下:
首先,定义了两个变量`minjob`和`minloc`,分别表示需要时间最少的任务的下标和需要的时间。
然后,使用一个`for`循环遍历整个数组,对于每个任务,如果`minloc`的值为-1,说明还没有找到未被访问过的任务,那么就判断当前任务是否被访问过且已经到达,如果是,则将当前任务的需要时间和下标分别赋值给`minjob`和`minloc`。如果`minloc`的值不为-1,说明已经找到一个未被访问过的任务,那么就比较当前任务的需要时间和`minjob`的值,如果当前任务需要时间更少,就将当前任务的需要时间和下标分别赋值给`minjob`和`minloc`。
最后,返回`minloc`的值,即需要时间最少的未被访问过的任务在数组中的下标。
// 找出当前时间的已到达的 执行时间最短的作业 int findminjob(job jobs[], int count,int current_time) { int i; //设置就绪队列 for (i = 0; i < quantity; i++) { if (current_time >= jobs[i].reach_time) jobs[i].isreached = 1; } printf("%d", jobs[3].isreached); int minjob = -1;//=jobs[0].need_time; int minloc = -1; for (int i = 0; i < count; i++) { if (minloc == -1) { if (jobs[i].isreached == 1 && jobs[i].visited == 0) { minjob = jobs[i].need_time; minloc = i; } } if (minjob > jobs[i].need_time && jobs[i].visited == 0 && jobs[i].isreached == 1) { minjob = jobs[i].need_time; minloc = i; } } if (minloc = -1) minloc = findearlyjob(jobs, quantity); printf("%d", minloc); return minloc; }
这段代码的功能是在给定作业列表中,找出当前时间已到达的并且执行时间最短的作业。具体实现流程如下:
1. 遍历作业列表,将当前时间已经到达的作业标记为已到达(isreached=1)。
2. 初始化最短作业和最短作业位置为-1。
3. 遍历作业列表,如果作业已到达(isreached=1)并且未被访问(visited=0),则将该作业的执行时间(need_time)赋值给最短作业(minjob),并将该作业位置赋值给最短作业位置(minloc)。
4. 如果当前遍历到的作业的执行时间(need_time)比最短作业(minjob)还要小,并且该作业已到达(isreached=1)且未被访问(visited=0),则将该作业的执行时间赋值给最短作业(minjob),并将该作业位置赋值给最短作业位置(minloc)。
5. 如果最短作业位置(minloc)仍然是初始值-1,则说明当前时间还没有到达任何作业的到达时间,因此调用findearlyjob函数找到最早到达的作业位置赋值给minloc。
6. 返回最短作业位置(minloc)。
需要注意的是,第15行的代码应该更正为`if (minloc == -1)`,而不是`if (minloc = -1)`。前者是判断是否相等,后者是赋值操作,容易引起逻辑错误。