来源刘H同学
来源刘H同学
来源刘H同学
来源刘H同学
来源刘H同学
目的:设计并实现一个算法Schedule,完成简单的操作系统任务调度问题。
描述:操作系统任务分为系统
任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务序列task(顺序存储),任务数为n。每个task的元素值表示任务的优先级,数值越小,优先级越高。算法scheduler实现如下功能,将task中的任务按照系统任务、用户任务依次存放到队列 system_task和 user_task中(队列中元素的值是任务在顺序表task中对应的下标),并且优先级高的任务排在前面。优先级相同的任务按照在task中的相对顺序入队排列(即task序列中在先的任务排在前面)。
要求:顺序表使用vector或数组,队列使用本学期设计好的顺序队列ADT
参考函数原形:
template<class ElemType>
void Schedule(vector<ElemType> &A, SqQueue<int> &system_task, SqQueue<int> &user_task);
输入说明 :
第一行:任务序列task中各个任务的优先级(任务优先级之间以空格分隔)
输出说明 :
第一行:任务序列task的遍历结果,以","分隔
格式: (序号,优先级) ...
空行
第二行:系统任务队列遍历结果,以空格分隔。如系统任务队列为空,输出 none
第三行:用户任务队列遍历结果,以空格分隔。如用户任务队列为空,输出 none
输入范例 :
0 30 155 1 80 300 155 170 40 30 99
输出范例 :
(0,0),(1,30),(2,155),(3,1),(4,80),(5,300),(6,155),(7,170),(8,40),(9,30),(10,99)
0 3 1 9 8
4 10 2 6 7
#include <iostream>
#include <sstream>
#include<algorithm>
#include <cstring>
#include <vector>
#include <stdio.h>
#include<queue>
using namespace std;
void Schedule(vector<int>task, int system_task[],int user_task[])
{
int m1 = 0, m2 = 0, temp;
for (int i = 0; i<task.size(); i++)
{
if (task[i] >= 0 && task[i]<50)
system_task[m1++] = i;
else if (task[i] >= 50 && task[i] <= 255)
user_task[m2++] = i;
}
system_task[m1] = -1;
user_task[m2] = -1;
for (int i = 0; i<m1 - 1; i++)
for (int j = i + 1; j<m1; j++)
{
if (task[system_task[i]]>task[system_task[j]])
{
temp = system_task[i];
system_task[i] = system_task[j];
system_task[j] = temp;
}
}
for (int i = 0; i<m2 - 1; i++)
for (int j = i + 1; j<m2; j++)
{
if (task[user_task[i]]>task[user_task[j]])
{
temp = user_task[i];
user_task[i] = user_task[j];
user_task[j] = temp;
}
}
for(int i=0; i<m2-1; i++)
{
if (task[user_task[i]]==task[user_task[i+1]]&&user_task[i+1]<user_task[i])
{
temp = user_task[i];
user_task[i] = user_task[i+1];
user_task[i+1] = temp;
}
}
for(int i=0; i<m1-1; i++)
{
if (task[system_task[i]]==task[system_task[i+1]]&&system_task[i+1]<system_task[i])
{
temp = system_task[i];
system_task[i] = system_task[i+1];
system_task[i+1] = temp;
}
}
if(system_task[0]==-1)
cout<<"none";
else
{
for (int i = 0; system_task[i] != -1; i++)
cout << system_task[i] << " ";
}
cout<<endl;
if(user_task[0]==-1)
cout<<"none";
else
{
for (int i = 0; user_task[i] != -1; i++)
cout << user_task[i] << " ";
}
}
int main()
{
vector<int>A;
int a[256],b[256];
int num,len=0;
string temp;
getline(cin,temp);
stringstream input(temp);
while(input>>num)
{
A.push_back(num);
len++;
}
for(int i=0; i<A.size(); i++)
{
cout<<'('<<i<<','<<A[i]<<')';
if(i<A.size()-1)
cout<<',';
}
cout<<endl<<endl;
Schedule(A,a,b);
}