.
ch=p->data.length-request; }
else if(q->data.length < p->data.length) { q=p;
ch=p->data.length-request; } }
p=p->next; }
if(q==NULL) return ERROR;//ûÓÐÕÒµ½¿ÕÏпé else if(q->data.length==request) {
q->data.length=1; return OK; } else {
temp->prior=q->prior; temp->next=q;
temp->data.address=q->data.address; temp->data.num=q->data.num; q->prior->next=temp; q->prior=temp;
q->data.address+=request; q->data.length=ch; q->data.num+=1; return OK; }
return OK; }
//·ÖÅäÖ÷´æ
Status allocation(int a) {
int request;//ÉêÇëÄÚ´æ´óС
printf(\ÇëÊäÈëÉêÇë·ÖÅäµÄÖ÷´æ´óС(µ¥Î»:KB):\ scanf(\
if(request<0 ||request==0) {
printf(\·ÖÅä´óС²»ºÏÊÊ£¬ÇëÖØÊÔ£¡\ return ERROR; }
¾«Æ·
.
switch(a) {
case 1: //ĬÈÏÊ×´ÎÊÊÓ¦Ëã·¨
if(First_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break;
case 2: //Ñ¡Ôñ×î¼ÑÊÊÓ¦Ëã·¨
if(Best_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break; case 3: //Ñ¡Ôñ×î²îÊÊÓ¦Ëã·¨
if(Worst_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break; } }
Status deal1(Node *p)//´¦Àí»ØÊÕ¿Õ¼ä {
Node *q=first;
for(;q!=NULL;q=q->next) {
if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0;
q->data.num=flag-1; }
if(q->prior->data.state!=0&&q->next->data.state==0) {
q->data.length+=q->next->data.length; q->next=q->next->next; q->next->next->prior=q; q->data.state=0;
q->data.num=flag; }
¾«Æ·
.
if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0; q->data.num=flag-1; }
if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }
return OK; }
Status deal2(Node *p)//´¦Àí»ØÊÕ¿Õ¼ä {
Node *q=first;
for(;q!=NULL;q=q->next) {
if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=p->prior; q->data.state=0;
q->data.num=flag-1; }
if(q->prior->data.state!=0&&q->next->data.state==0) {
q->data.state=0; }
if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior;
¾«Æ·
.
q->data.state=0; q->data.num=flag-1; }
if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }
return OK; }
//Ö÷´æ»ØÊÕ
Status recovery(int flag) {
Node *p=first;
for(;p!=NULL;p=p->next) {
if(p->data.num==flag) { if(p->prior==first) { if(p->next!=end)//µ±Ç°PÖ¸ÏòµÄÏÂÒ»¸ö²»ÊÇ×îºóÒ»¸öʱ { if(p->next->data.state==0) //ÓëºóÃæµÄ¿ÕÏпéÏàÁ¬ {
p->data.length+=p->next->data.length; p->next->next->prior=p; p->next=p->next->next; p->data.state=0; p->data.num=flag; } else p->data.state=0; } if(p->next==end)//µ±Ç°PÖ¸ÏòµÄÏÂÒ»¸öÊÇ×îºóÒ»¸öʱ {
p->data.state=0; } }//½áÊøif(p->prior==block_first)µÄÇé¿ö else if(p->prior!=first) { if(p->next!=end) { deal1(p);
¾«Æ·