#include
<iostream>//首次适应算法
#include<cstdlib>
using namespace std;
typedef struct JOB
{
string
JobName;
int
needTime;
int
needMemorrizes;
int
status;
JOB
*next;
} JobProgram;
JobProgram *head,*Program,*p;
typedef struct memorrizesElement
{
int
memorrizes;
};
memorrizesElement element[3];
void initMemorry()
{
for
(int i = 0; i<3; i++)
element[i].memorrizes =
5;
}
int searchAndJudge(JobProgram *JP)
{
for
(int i = 0; i<3; i++)
{
if (element[i].memorrizes
>= JP->needMemorrizes)
return
i;
}
return
-1;
}
void intput()
{
Program
= new JobProgram;
cout<<"请输入作业名称:
";
cin>>Program->JobName;
cout<<"请输入作业需要时间:
";
cin>>Program->needTime;
cout<<"请输入作业需要内存数:
";
cin>>Program->needMemorrizes;
Program->status = -1;
if
(head == NULL)
{
p = head;
head = Program;
p = Program;
head->next =
NULL;
}
else
{
p->next =
Program;
p = Program;
p->next =
NULL;
}
}
void MoveMemorryManaging()
{
// JobProgram *q;
JobProgram *ppp = head;
JobProgram *pre;
while
(ppp!=NULL)
{
int k =
searchAndJudge(ppp);
if (ppp->status
==-1)
{
if (k!=-1)
{
if
(ppp->needMemorrizes <= 5)
{
//element[k].flag = 1;
element[k].memorrizes -=
ppp->needMemorrizes;
ppp->status =
k;
cout<<"作业正在运行:
"<<endl;
cout<<"作业名字:
"<<ppp->JobName<<endl<<"作业需要时间:
"<<ppp->needTime<<endl<<"作业状态:
"<<ppp->status<<endl;
ppp->needTime--;
if
(ppp->needTime==0)
{
if (ppp == head)
{
JobProgram
*s = head;
head =
head->next;
element[s->status].memorrizes +=
s->needMemorrizes;
delete
s;
}
else
{
JobProgram
*s = ppp;
pre->next =
ppp->next;
element[s->status].memorrizes +=
s->needMemorrizes;
delete
s;
ppp =
pre;
}
}
}
else
{
cout<<"你输入的内存需要大小超过了固定分区每个块的大小,无法装入运行"<<endl;//这里可以用于动态分配内存时
exit(1);
}
}
else
{
cout<<"作业就绪:
"<<endl;
cout<<"作业名字:
"<<ppp->JobName<<endl<<"作业需要时间:
"<<ppp->needTime<<endl<<"作业状态:
"<<ppp->status<<endl;
}
}
else
{
cout<<"作业正在运行:
"<<endl;
cout<<"作业名字:
"<<ppp->JobName<<endl<<"作业需要时间:
"<<ppp->needTime<<endl<<"作业状态:
"<<ppp->status<<endl;
ppp->needTime--;
if (ppp->needTime==0)
{
if (ppp ==
head)
{
JobProgram *s = head;
head =
head->next;
element[s->status].memorrizes +=
s->needMemorrizes;
delete s;
}
else
{
JobProgram *s = ppp;
pre->next =
ppp->next;
element[s->status].memorrizes +=
s->needMemorrizes;
delete s;
ppp = pre;
}
}
}
pre = ppp;
ppp =
ppp->next;
}
}
int main()
{
int
n;
cout<<"请输入要执行的作业的个数:
";
cin
>> n;
initMemorry();
for
(int i = 0; i<n; i++)
intput();
while(head)
MoveMemorryManaging();
return
0;
}