利用C语言实现短作业优先算法,给出具体完整的代码
时间: 2024-11-27 16:13:51 浏览: 15
最短作业时间优先算法操作系统实验
4星 · 用户满意度95%
在C语言中,我们可以利用循环、队列(可以使用数组或链表)以及条件判断等基本数据结构和控制结构来实现短作业优先(Shortest Job First,SJF)调度算法。下面是一个简单的示例,这个例子中假设我们有一个任务列表,每个任务都有一个完成时间。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int pid; // 进程ID
int burst_time; // 执行时间
} Process;
// 使用数组模拟队列
#define MAX_PROCESSES 5
Process queue[MAX_PROCESSES];
// 比较函数,用于排序
int compare(Process a, Process b) {
return a.burst_time < b.burst_time;
}
void sjf(int num_processes) {
for (int i = 0; i < num_processes; ++i) {
scanf("%d %d", &queue[i].pid, &queue[i].burst_time);
}
// 对任务按照完成时间升序排列
qsort(queue, num_processes, sizeof(Process), compare);
// 初始化当前运行时间和剩余进程队列
int current_time = 0;
int completed_tasks = 0;
while (completed_tasks < num_processes) {
// 当前时间加上最短进程的执行时间
current_time += queue[completed_tasks].burst_time;
// 如果所有进程都已处理完,则退出
if (current_time >= queue[num_processes - 1].burst_time) {
break;
}
// 队列移除已经处理的任务
completed_tasks++;
}
printf("Total waiting time: %d\n", current_time);
}
int main() {
int num_processes;
printf("Enter the number of processes: ");
scanf("%d", &num_processes);
sjf(num_processes);
return 0;
}
```
阅读全文