{
p=p->next; has=0; } }
if(has==0) /*ÊäÈë×÷ÒµÃû²»´æÔÚ*/ {
printf(\ÊäÈë×÷ÒµÃû´íÎó!ÇëÖØÐÂÊäÈë!\\n\ input2(); } }
void init_sub() /*×Ô¶¯³õʼ»¯¿ÕÏзÖÇø±í*/ {
r=gettype(SUB);
strcpy(r->name,\r->addr=5; r->size=10; r->state='n'; sub=r; sub->pre=NULL;
s=gettype(SUB);
strcpy(s->name,\s->addr=20; s->size=120; s->state='n'; sub->next=s;
s->pre=sub; r=s;
r->next->next=NULL;
} void init_manual() /*ÊÖ¶¯³õʼ»¯¿ÕÏзÖÇø±í*/ {
int i,num3; char
s[][10]={\five\en\
printf(\ÇëÊäÈë³õʼ»¯¿Õ¼ä¿éÊý,×î´óÖµ10:\
scanf(\ for(i=0;i { r=gettype(SUB); printf(\¿éºÅ:%s\\n\ strcpy(r->name,s[i]); printf(\ÊäÈë¿éÊ×µØÖ·:\ scanf(\ printf(\ÊäÈë¿éµÄ´óС:\ scanf(\ r->state='n'; r->next=NULL; initsort(); /*°´Ê×⽫·ÖÇø±íÁ¬ s=gettype(SUB); ½ÓÆðÀ´*/ strcpy(s->name,\ } s->addr=160; s->size=40; s->state='n'; printf(\°´ÈÎÒ»¼ü¼ÌÐø......\\n\ r->next=s; s->pre=r; r=s; s=gettype(SUB); getchar(); } strcpy(s->name,\ s->addr=220; s->size=10; s->state='n'; void disp() /*¿ÕÏзÖÇø±íµÄÏÔʾº¯Êý r->next=s; s->pre=r; r=s; */ { printf(\·ÖÇø Ê×µØÖ· ³¤¶È ״̬ \\n\ r=sub; s=gettype(SUB); strcpy(s->name,\ s->addr=250; s->size=20; s->state='n'; while(r!=NULL) r->next=s; { s->pre=r; 37 printf(\%s\\t\\t%d\\t\\t%d\\t\\t%c\\n\r->name,r->addr,r->size,r->state); r=r->next; } printf(\ } void disp2() /*ÏÔʾÒÑ·ÖÅäÄÚ´æµÄ×÷Òµ±íº¯Êý*/ { printf(\×÷ÒµÃû Ê×µØÖ· ³¤¶È ״̬ \\n\ p=as; while(p!=NULL) { printf(\%s\\t\\t%d\\t\\t%d\\t\\t%c\\n\p->name,p->addr,p->size,p->state); p=p->next; } printf(\} void firstfit(JCB *pr) /*Ê×´ÎÊÊÓ¦Ëã·¨¶Ô×÷Òµ·ÖÇø*/ { r=sub; /*´Ó¿ÕÏбíÍ·¿ªÊ¼Ñ°ÕÒ*/ while(r!=NULL) { if(((r->size)>(pr->size))&&(r->state=='n')) /*ÓпÕÏзÖÇø´óÓÚ×÷Òµ´óСµÄÇé¿ö*/ { system(\ system(\ flag=1; /*·ÖÅä³É ¹¦±ê־λÖÃ1*/ q=pr; //qÊÇÒÑ·ÖÅä×÷Òµ¶ÓÁÐÍ·Ö¸Õë q->state='r'; lastsort(); /*¶ÔÒÑ·ÖÅä×÷Òµ°´ÏȺó´ÎÐòÐγÉÁ´±í*/ printf(\×÷Òµ%sµÄ·ÖÇøÎª[%s],Ê×µØÖ·Îª%d.\\n\ break; } else if(((r->size)==(pr->size))&&(r->state=='n')) /*ÓпÕÏзÖÇøµÈÓÚ×÷Òµ´óСµÄÇé¿ö*/ { pr->addr=r->addr; flag=1; /*·ÖÅä³É¹¦±ê ־λÖÃ1*/ q=pr; lastsort(); /*²åÈëÒÑ·ÖÅä×÷Òµ¶ÓÁÐ*/ //¿ÕÏзÖÇøÒÑÍê³É·ÖÅä,Ӧɾ³ý if(r->pre==NULL) //¸Ã·ÖÇø´¦ÔÚÁ´±íÍ· { sub=r->next; r->next->pre=NULL; } if(r->next==NULL) //¸Ã·ÖÇø´¦ÔÚÁ´±íβ { r->pre->next=NULL; } else //¸Ã·ÖÇø´¦ÔÚÁ´±íÖмä { r->pre->next=r->next; r->next->pre=r->pre; } printf(\×÷Òµ%sµÄ·ÖÇøÎª pr->addr=r->addr; r->size-=pr->size; // ¸üпÕÏзÖÇø´óС r->addr+=pr->size; //¸üпÕÏзÖÇøµØÖ· 38 [%s],Ê×µØÖ·/*ÓÐÏÂÁÚÓÖÓÐÉÏÁÚ*/ { s->size+=pr->size; r->pre->next=r->next; //ºÏ²¢ÉÏÏÂÁÚÐè°ÑÖ¸ÕëÖ¸ÏòÏÂÁÚµÄÏÂÒ»¸öÇøÓò ÁÚ±ê־λÖÃ1*/ } isup=1; /*ÉÏ Îª%d.\\n\ break; } else { r=r->next; } flag=0; } break; else /* if(flag==0) /*×÷Òµ¹ý´óµÄÇé¿ö*/ { printf(\×÷Òµ%s³¤¶È¹ý´ó£¬ÄÚ´æ²»×㣬·ÖÇø·ÖÅä³ö´í!\\n\ is=1; } void reclfirst(JCB *pr) /*Ê×´ÎÊÊÓ¦×÷񵂿Óò»ØÊÕËã·¨*/ { SUB *k; r=sub; while(r!=NULL) { } ¼ÌÐøËÑË÷¿ÉÄܵÄÉÏÁÚ*/ { s=s->next; isup=0; /* ÉÏÁÚ±ê־λÖÃ0*/ } } if(isup==0) /*ÓÐÏÂÁÚÎÞÉÏÁÚ*/ { r->addr=pr->addr; r->size=pr->size; } break; } else { r=r->next; λÖÃ0*/ isdown=0; /*ÏÂÁÚ±êÖ¾ if(r->addr==((pr->addr)+(pr->size))) /*×÷Òµ»ØÊÕÇøÓòÓÐÏÂÁÚ*/ { pr->size+=r->size; s=sub; isdown=1; /*ÏÂÁÚ±êÖ¾ } } if(isdown==0) /*ÇøÓòÎÞÏÂÁÚ*/ { s=sub; while(s!=NULL) { λÖÃ1*/ while(s!=NULL) { if(((s->addr)+(s->size))==(pr->addr)) /*ÎÞÏÂÁÚµ«ÓÐÉÏÁÚ*/ if(((s->addr)+(s->size))==(pr->addr)) { 39 s->size+=pr->size; r->pre->next=k; k->pre=r->pre; r->pre=k; k->next=r; } break; } else { r=r->next; /*ÉÏÁÚ¿Õ¼ä+×÷ÒµÊͷſռä=еÄÇøÓò¿Õ¼ä*/ isup=1; /*ÉÏÁÚ±ê־λÖÃ1*/ break; } else { } s=s->next; isup=0; /*ÉÏÁÚ ±ê־λÖÃ0*/ } } } if(isup==0) /*ÎÞÏÂÁÚÇÒÎÞÉÏÁÚ*/ { k=gettype(SUB); /*ÖØÐÂÉú³ÉÒ»¸öеķÖÇø½áµã*/ if(r==NULL) /*зÖÇø²åÈëÄÚ´æ¿Õ¼äβ½Úµã*/ { s=sub; strcpy(k->name,pr->name); while(s->next!=NULL) /*пռäÃû×Ö*/ s=s->next; k->addr=pr->addr; k->size=pr->size; k->state='n'; r=sub; while(r!=NULL) { s->next=k; k->pre=s; k->next=NULL; } } Óò %s ¼º »Ø if((r->addr)>(k->addr)) /*°´·ÖÇøÊ×µØÖ·ÅÅÁÐ,»ØÊÕÇøÓò²åÔÚºÏÊʵÄλÖÃ*/ { if(r==sub) } printf(\ÇøÊÕ.\} /*зÖÇø²åÈëÄÚ´æ¿Õ¼äÊ×½Úµã*/ { k->next=r; r->pre=k; sub=k; void print() //³õʼ»¯½çÃæ { printf(\ printf(\*************\\n\ printf(\Ö÷´æ¿Õ¼äµÄ·ÖÅäÓë»ØÊÕÑÝʾ\\n\ printf(\ <<Ê×´ÎÊÊÓ¦Ëã·¨>>\\n\ printf(\ /*¸üпÕÏжÓÁÐÊ×Ö¸Õë*/ k->pre=NULL; } else /*зÖÇø²åÈëÄÚ´æ¿Õ¼äÖмä*/ { 40