华为机试练习ex013_cpp之操作系统任务调度问题

来源:互联网 发布:淘宝店一般能赚多少钱 编辑:程序博客网 时间:2024/05/01 10:52

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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, int system_task[], int user_task[]) 



// 操作系统的任务调度问题#include<iostream>using namespace std;void scheduler(int task[], int n, int system_task[], int user_task[]){int *p = task;int i=0, j=0;if( p == NULL || n<=0 ) // 判断输入条件{cout<<"输入出错!\n"<<endl;}for (int k=0; k<n; k++){if(task[k] < 50) // 系统任务,使用插入排序{if( i == 0 ){system_task[i]=k;}else{if( task[k] > task[system_task[i-1]]){system_task[i]=k;}else{int temp=task[k];int t=i;while(t>0 && task[system_task[t-1]]>temp){system_task[t]=system_task[t-1];t--;}system_task[t]=k;}}i++;}else if(task[k] <= 255) // 用户任务{if( j == 0 ){user_task[j]=k;}else{if( task[k] > task[user_task[j-1]]){user_task[j]=k;}else{int temp=task[k];int t=j;while(t>0 && task[user_task[t-1]]>temp){user_task[t]=user_task[t-1];t--;}user_task[t]=k;}}j++;}}system_task[i]=-1;user_task[j]=-1;}int main(){int n;cout<<"输入任务数量:"<<endl;cin>>n;int *task=new int[n]; // 数组的传值问题非常重要!!int *system_task=new int[n+1];int *user_task=new int[n+1];cout<<"输入每个任务的优先级:"<<endl;for(int i=0; i<n; i++){cin>>task[i];}scheduler(task, n, system_task, user_task);cout<<"系统任务数组为:"<<endl;for(int i=0; system_task[i] != -1; i++){cout<<system_task[i]<<" ";}cout<<"-1"<<endl;cout<<"用户任务数组为:"<<endl;for(int i=0; user_task[i] != -1; i++){cout<<user_task[i]<<" ";}cout<<"-1"<<endl;delete []task;delete []system_task;delete []user_task;return 0;}


0 0
原创粉丝点击