}
}
}
void fcfs(int num)//先来先服务
{
for (int i = 0; i < num; i++)
{
job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间
if (job[i].Tstart < job[i].Tarrive)
{
job[i].Tstart = job[i].Tarrive;
}
else
{
job[i].Tstart = job[i - 1].Taccomplish;
}
job[i].Taccomplish = job[i].Tstart + job[i].Tservice;
}
}
void sjf(int num)//短作业优先
{
Service_sort(num);
for (int i = 0; i < num; i++)
{
job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间
if (job[i].Tstart < job[i].Tarrive)//该作业的开始时间小于到达时间
{
job[i].Tstart = job[i].Tarrive;
}
else
{
job[i].Tstart = job[i - 1].Taccomplish;
}
job[i].Taccomplish = job[i].Tstart + job[i].Tservice;
}
}
void RR(int num)//RR算法
{
int q;
cout << “请输入时间片长度:” << endl;
cin >> q;
int flag = 1;//标志队列中是否还有进程
int finish_pro = 0;//完成的进程数
cout << “进程名称\t” << “开始时间\t” << “运行时间\t” << “剩余服务时间\t” << “结束时间\t” << endl;
int time;//记录当前时刻时间
int c = 0;
while (finish_pro < num)
{
flag = 0;//就绪队列里没进程
for (int i = c; i < num; i++)
{
Arrive_sort(num);
job[i].Tsurplus = job[i].Tservice;
job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间
if (job[i].Tstart < job[i].Tarrive)//该作业的开始时间小于到达时间
{
job[i].Tstart = job[i].Tarrive;
}
else
{
job[i].Tstart = job[i - 1].Taccomplish;
}
time = job[i].Tstart;
if (job[i].if_finish == 1) continue;//该进程已完成
else
{
if (job[i].Tsurplus <= q && time >= job[i].Tarrive)//未完成且少于一个时间片
{
flag = 1;
time = time + job[i].Tsurplus;
job[i].if_finish = 1;//该进程完成
job[i].Taccomplish = time;
cout << job[i].name << “\t\t” << job[i].Taccomplish - job[i].Tsurplus << “\t\t” << job[i].Tsurplus << “\t\t” << 0 << “\t\t” << job[i].Taccomplish << endl;
job[i].Tsurplus = 0;
}
else if (job[i].Tsurplus > q && time >= job[i].Tarrive)
{
flag = 1;
time = time + q;
job[i].Tsurplus -= q;
job[i].Taccomplish = time;
cout << job[i].name << “\t\t” << time - q << “\t\t” << q << “\t\t” << job[i].Tsurplus << “\t\t” << job[i].Taccomplish << endl;
job[num].name = job[i].name;
job[num].Tarrive = time;
job[num].Tservice = job[i].Tsurplus;
num++;
}
if (job[i].if_finish == 1) finish_pro++;//一个进程完成加一
}
c++;
}break;
if (flag == 0 && finish_pro < num)//没执行完且没进入就绪队列
{
for (int i = 0; i < num; i++)
{
if (job[i].if_finish == 0)
{
time = job[i].Tarrive;
break;
}
}
}
}
}
//输出
void print(int num)
{
cout << “进程名” << “\t” << “到达时间” << “\t” << “服务时间” << “\t” << “完成时间” << endl;
for (int i = 0; i < num; i++)
{
cout << job[i].name << “\t” << job[i].Tarrive << “\t\t” << job[i].Tservice << “\t\t” << job[i].Taccomplish << endl;
}
}
void display(int num)
{
int ch = 0;
cout << “—————————————————————————” << endl;
cout << “——————————1、FCFS算法 —————————” << endl;
cout << “——————————2、SJF算法——————————” << endl;
cout << “——————————3、RR算法 ——————————” << endl;
cout << “——————————4、优先级算法 ————————” << endl;
cout << “——————————5、退出 ———————————” << endl;
cout << “—————————————————————————” << endl;
do {
cout << “请选择你想要的算法:” << endl;
cin >> ch;
switch (ch) {
case 1:
Arrive_sort(num);
fcfs(num);
print(num);
break;
case 2:
//Arrive_Short_sort(num);
sjf(num);
print(num);
break;
case 3:
RR(num);
break;
case 4:
print(num);
break;
case 5:
exit;
default:
cout << “输入错误,请重新输入!” << endl;
break;
}
} while (ch != 5);
}
int main()
{
int num;
char jname;
int arrive;
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料
存中…(img-XkG6vZCG-1711111056388)]
[外链图片转存中…(img-L1IrIkbw-1711111056389)]
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
[外链图片转存中…(img-9NJRWBty-1711111056389)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-dNY4VIhA-1711111056390)]