操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。
例如:task[] = {0, 30, 155, 1, 80, 300,170, 40, 99} system_task[] = {0, 3, 1, 7,-1} user_task[] = {4, 8, 2, 6, -1}
函数接口 void scheduler(int task[], int n, intsystem_task[], int user_task[])
#include <iostream>
#include <algorithm>
using namespace std;
int s=0;
int t=0;
void scheduler(int task[], int n, int system_task[], int user_task[]);
int main()
{
int task[] = {0, 30, 155, 1, 80, 300,170, 40, 99};
//system_task[] = {0, 3, 1, 7,-1};
//user_task[] = {4, 8, 2, 6, -1}
int system_task[9];
int user_task[9];
int n = 9;
scheduler(task, n, system_task, user_task);
for(int i=0; i<s; i++)
{
cout<<system_task[i]<<" ";
}
cout<<endl;
for(int i=0; i<t; i++)
{
cout<<user_task[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int *p_task;
p_task = task;
int i,j;
int min,temp;
struct{
int data;
int index;
}pTask[100];
for(i=0; i<n; i++)
{
pTask[i].data = p_task[i];
pTask[i].index = i;
}
min = pTask[0].data;
for(i=0; i<n; i++)
for(j=i; j<n; j++)
{
if(pTask[j].data<pTask[i].data)
{
temp = pTask[j].data;
pTask[j].data = pTask[i].data;
pTask[i].data = temp;
temp = pTask[j].index;
pTask[j].index = pTask[i].index;
pTask[i].index = temp;
}
}
for(i=0; i<n; i++)
{
if(pTask[i].data<50)
{
system_task[s++] = pTask[i].index;
}
else if(pTask[i].data>=50 && pTask[i].data<=255)
{
user_task[t++] = pTask[i].index;
}
}
system_task[s++] = -1;
user_task[t++] = -1;
}