c++复杂的最高优先数优先算法实现方式
时间: 2023-09-20 09:11:43 浏览: 68
最高优先数优先算法(Highest Priority First, HPF)是一种非抢占式的进程调度算法,它会根据每个进程的优先级来选择下一个要运行的进程。如果有多个进程的优先级相同,则按照先来先服务的原则来调度。
以下是一个C++实现最高优先数优先算法的示例代码,它考虑了进程的到达时间、服务时间和优先级等因素。代码实现中,使用了一个优先队列来维护就绪队列,每次选择优先级最高的进程来运行。
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Process {
int id; // 进程ID
int arrival_time; // 到达时间
int priority; // 优先数
int service_time; // 服务时间
int running_time; // 已运行时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
double weight_turnaround_time; // 带权周转时间
};
bool operator<(const Process& a, const Process& b) {
return a.priority < b.priority;
}
int main() {
int n; // 进程数
vector<Process> processes; // 进程列表
priority_queue<Process> ready_queue; // 就绪队列
// 输入进程信息
cin >> n;
processes.resize(n);
for (int i = 0; i < n; i++) {
processes[i].id = i + 1;
cin >> processes[i].arrival_time;
cin >> processes[i].priority;
cin >> processes[i].service_time;
processes[i].running_time = 0;
}
int current_time = 0; // 当前时间
int finished_count = 0; // 已完成的进程数
Process running_process = {-1}; // 当前正在运行的进程
while (finished_count < n) {
// 将已到达的进程加入就绪队列
for (int i = 0; i < n; i++) {
if (processes[i].arrival_time == current_time) {
ready_queue.push(processes[i]);
}
}
// 选择优先数最高的进程运行
if (!ready_queue.empty()) {
Process p = ready_queue.top();
ready_queue.pop();
// 如果进程没有运行过,则更新进程的开始时间
if (p.running_time == 0) {
p.finish_time = current_time + p.service_time;
p.turnaround_time = p.finish_time - p.arrival_time;
p.weight_turnaround_time = (double)p.turnaround_time / p.service_time;
}
// 运行一个时间片
p.running_time++;
running_process = p;
// 如果服务时间到了,则撤销进程
if (p.running_time == p.service_time) {
finished_count++;
running_process = {-1};
}
} else {
running_process = {-1};
}
current_time++;
}
// 输出结果
for (int i = 0; i < n; i++) {
cout << "进程" << processes[i].id << ": "
<< "周转时间=" << processes[i].turnaround_time << ", "
<< "带权周转时间=" << processes[i].weight_turnaround_time << endl;
}
return 0;
}
```
希望这个示例代码能够对您有所帮助。如果您还有其他问题或需要进一步解释,请随时提出。
阅读全文