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

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


你可能感兴趣的:(华为机试练习ex013_cpp之操作系统任务调度问题)