}
}
p9=p9->next; { }
if((p12->len)>(p13->len)){如果p12长度>p13长度 }
p11=new area;//把p13给p11 p11->end=p13->end; p11->len=p13->len; p11->sign=p13->sign; p11->start=p13->start; p11->next=NULL;
swap(p13,p12);交换两个P13,P12 swap(p12,p11);交换两个P12,P11
while(p13!=NULL)//把空闲区按从小到大的顺序排列
p13=p13->next;
void swap(area *p13,area *p14) { }
//最先适应法 void listID(){
int n=0;
area *p9=freehead->next,*p0=freehead,*p11,*p12,*p13; while(p0!=NULL){ }
p0=freehead; if (n==1)
p0=p0->next; n++;
p13->len=p14->len; p13->sign=p14->sign; p13->end=p14->end; p13->start=p14->start;
}
return;
{
else
while(p9!=NULL) }
p12=p0; p13=p9; p0=p0->next; p9=p9->next; { }
if((p12->start)>(p13->start)){ }
p11=new area; p11->end=p13->end; p11->len=p13->len; p11->sign=p13->sign; p11->start=p13->start; p11->next=NULL; swap(p13,p12); swap(p12,p11);
while(p13!=NULL)//把地址按递增顺序排列
p13=p13->next;
void inserfree(area * p3){查看进程之间的前后的区域状态
int flag=0;
area *pf=freehead,*pe=freehead,*pe1; }
if(pf!=NULL){
flag=5;
}//flag=5 有前置空闲块
if(pf->end!=p3->start)//判断是否有前继空闲块 pf=pf->next;
while(pf!=NULL){
else break;
{ { }
else flag=1;//没有置1
while(pe!=NULL)//判断是否有后继空闲块
if(pe->start!=p3->end) pe1=pe; pe=pe->next;
else break; }
if(flag==5)
flag=6; else flag=4;
if(pe!=NULL) {
}//有前置且有后置FLAG=6,只有后置=4 else{
if(flag==1)
flag=2;
}//前后都没有置2
case 5:pf->end=pf->end+p3->len;前置空闲块
pf->len=pf->len+p3->len; break;
pe->len=pe->len+p3->len; break; p8=new area; p8->len=p3->len; p8->end=p3->end; p8->next=freehead;
switch(flag){
case 4:pe->start=pe->start-p3->len;只有后置
case 2: area* p8; p8->start=p3->start; p8->sign=0;
freehead=p8;
}
}
break;
pf->len=pf->len+pe->len+p3->len; if(pe->next==NULL){ } else {
if(pe==freehead){ } else { }
}
pe1->next=pe->next; delete pe; freehead=pe->next; delete pe;
pe1->next=NULL; delete pe;
case 6:pf->end=pe->end;有前置与后置
break;
default :break;
void setfree(){ 释放进程
int chose;
cout<<\选择一个要释放的任务 :\
cin>>chose;
area*p7=usedhead,*p2;
while( p7!=NULL) { //寻找有无此进程 }
if(p7==NULL){
if( p7->sign!=chose ){ p2=p7; p7=p7->next; } else break;
} }
}
cout<<\没有此进程,释放内存失败,返回修改!\return;
inserfree(p7);//将其释放的内存插入空闲块中 usedhead=NULL; if(p7->next==NULL){
p2->next=NULL; delete p7;
if(p7==usedhead &&p7->next==NULL) else{
}//将次进程从已分配表中删除 else { }
cout<<\成功释放所选任务的内存!当前内存状况为:\print(freehead); print(usedhead); cout< if(p7==usedhead){ } else { } p2->next=p7->next; delete p7; usedhead=p7->next; delete p7; void inserused(area *p3,int num,int need){//将新项插入已分配表中 area*p5; if(usedhead==NULL){ p5=new area; p5->start=p3->start; p5->len=need; p5->sign=num;