c队列-简单任务调度代码
时间: 2023-05-24 16:03:53 浏览: 113
A:
以下是一个基于队列的简单任务调度代码:
```
#include<iostream>
#include<vector>
using namespace std;
// 定义任务结构体
struct Task {
int id; // 任务ID
int time; // 任务需要的执行时间
};
int main() {
int n; // 任务个数
cin >> n;
vector<Task> tasks(n);
for(int i=0; i<n; i++) {
tasks[i].id = i;
cin >> tasks[i].time;
}
int q; // 时间片长度
cin >> q;
int t = 0; // 当前时间
vector<Task> queue; // 任务队列
int head = 0; // 队列头部指针
while(head < tasks.size() || queue.size() > 0) {
if(queue.size() > 0) { // 任务队列非空,取出队头任务
Task task = queue[0];
queue.erase(queue.begin());
// 执行任务(减少任务需要的执行时间)
task.time -= q;
t += q;
// 如果任务还没执行完,放回队列尾部继续执行
if(task.time > 0) {
queue.push_back(task);
} else { // 任务已经执行完
cout << task.id << " " << t << endl;
}
} else { // 任务队列为空,加入新任务
Task task = tasks[head];
head++;
queue.push_back(task);
}
}
return 0;
}
```
上述代码以时间片为基本单位,不断从队列头部取出任务执行,如果执行完毕则输出任务ID和完成时间。如果还未执行完毕,则将任务放回队列尾部继续执行。如果队列为空,则加入新任务。总时间复杂度为O(n^2)。