来源刘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
void Schedule(vector
输入说明 :
第一行:任务序列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
- #include
- #include
- #include
- #include
- #include
- #include
- 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
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
1; i++) - for (int j = i + 1; 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
1; i++) - for (int j = i + 1; 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
-1; i++) - {
- if (task[user_task[i]]==task[user_task[i+1]]&&user_task[i+1]
- {
- temp = user_task[i];
- user_task[i] = user_task[i+1];
- user_task[i+1] = temp;
- }
- }
- for(int i=0; i
-1; i++) - {
- if (task[system_task[i]]==task[system_task[i+1]]&&system_task[i+1]
- {
- 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<
- 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
size(); i++) - {
- cout<<'('<','<')';
- if(i
size()-1) - cout<<',';
- }
- cout<
- Schedule(A,a,b);
- }
-
相关阅读:
数据结构模拟题[二]
接口测试常问面试题
模板匹配与像素统计
吴恩达深度学习笔记——序列模型与循环神经网络(Sequence Models)
rust学习——方法 Method
redis中常见的问题(缓存穿透,缓存雪崩,缓存击穿,redis淘汰策略)
初学UI会用到哪些软件?
弘辽科技:淘宝14天降权会恢复吗?多久能恢复正常?
ES6的异步,promise,async和await了解
4.5每日一题(多元函数比较大小通过偏积分)
-
原文地址:https://blog.csdn.net/Ultravioletrays/article/details/126799679