用c++写最短进程优先的进程调度,输入:进程名 到达时间 服务时间 优先级 输出:进程名 开始时间 完成时间 周转时间 等待时间(不抢占)
时间: 2024-05-02 19:17:06 浏览: 67
以下是用C++实现最短进程优先的进程调度的示例代码:
```c++
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Process {
char name[10]; // 进程名
int arrival_time; // 到达时间
int service_time; // 服务时间
int priority; // 优先级
int start_time; // 开始时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
int waiting_time; // 等待时间
int remaining_time; // 剩余服务时间
}processes[100];
bool cmp(Process a, Process b) {
return a.arrival_time < b.arrival_time; // 按到达时间升序排序
}
int main() {
int n;
cout << "请输入进程个数:";
cin >> n;
for(int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个进程的信息:\n";
cout << "进程名:";
cin >> processes[i].name;
cout << "到达时间:";
cin >> processes[i].arrival_time;
cout << "服务时间:";
cin >> processes[i].service_time;
cout << "优先级:";
cin >> processes[i].priority;
processes[i].remaining_time = processes[i].service_time; // 剩余服务时间初始化为服务时间
}
sort(processes, processes + n, cmp); // 按到达时间排序
int current_time = processes[0].arrival_time; // 当前时间初始化为第一个进程的到达时间
int complete_count = 0; // 完成进程数
while(complete_count < n) {
int shortest_index = -1; // 最短进程的下标
int shortest_service_time = 0x3f3f3f3f; // 最短服务时间,用一个很大的数初始化
for(int i = 0; i < n; i++) {
if(processes[i].arrival_time <= current_time && processes[i].remaining_time < shortest_service_time && processes[i].remaining_time > 0) {
shortest_index = i;
shortest_service_time = processes[i].remaining_time;
}
}
if(shortest_index == -1) { // 没有进程在当前时间到达并且还未完成
current_time++;
}
else {
processes[shortest_index].remaining_time--;
current_time++;
if(processes[shortest_index].remaining_time == 0) { // 进程完成
complete_count++;
processes[shortest_index].finish_time = current_time; // 完成时间为当前时间
processes[shortest_index].turnaround_time = processes[shortest_index].finish_time - processes[shortest_index].arrival_time; // 周转时间为完成时间减去到达时间
processes[shortest_index].waiting_time = processes[shortest_index].turnaround_time - processes[shortest_index].service_time; // 等待时间为周转时间减去服务时间
}
}
}
// 输出结果
cout << "进程名\t开始时间\t完成时间\t周转时间\t等待时间\n";
for(int i = 0; i < n; i++) {
cout << processes[i].name << "\t" << processes[i].arrival_time << "\t\t" << processes[i].finish_time << "\t\t" << processes[i].turnaround_time << "\t\t" << processes[i].waiting_time << endl;
}
return 0;
}
```
注意,在最短进程优先算法中,如果有多个进程在当前时间到达并且剩余服务时间相同,则选择先到达的进程。因此,当有多个符合条件的进程时,我们需要遍历所有进程来找到最短进程。
阅读全文