cout<<\起始地址 分区大小 进程名\for(i=0;i if(Used_Table[i].flag!=0) printf(\].length, Used_Table[i].flag); break; default: cout<<\请输入正确的选项!\} } } 截 图 : 2.首次适应算法实现动态分区分配 代码:#include #define getpch(type) (type*)malloc(sizeof(type)) /*/#define NULL 0*/ struct table{ char name[10]; char state; /* D(分配) or N(空闲)*/ int size; /*分区大小*/ int addr; /*起始地址*/ struct table *next; struct table *prev; }*tab=NULL,*p; typedef struct table TABLE; UI(){ printf(\\\n\ printf(\ 首次适应算法 \\n\ printf(\ \\n\ printf(\ 计科3班 顾志祥 20101308103 \\n\ printf(\~~~~~\\n\} recycle(char n[10]){ TABLE *pr=NULL; for(pr=tab;pr!=NULL;pr=pr->next){ if(!strcmp(pr->name,n)&&pr->state=='D'){ if(pr->prev!=NULL&&pr->prev->state=='N'){ /*回收区的前一分区空闲*/ if(pr->next->state=='N') { /*回收区的前后分区都空闲*/ pr->state='N'; pr->prev->size+=(pr->size+pr->next->size); /*合并分区大小*/ pr->prev->next=pr->next->next; /*删除回收分区及其后一空闲pr->next->next->prev=pr->prev; return 0; 分区表项*/ } else { pr->state='N'; pr->prev->size+=pr->size; pr->next->prev=pr->prev; pr->prev->next=pr->next; return 0; } } else if(pr->next!=NULL&&pr->next->state=='N'){ } } pr->state='N'; pr->size+=pr->next->size; if(pr->next->next!=NULL){ pr->next->next->prev=pr; pr->next=pr->next->next; } else pr->next=NULL; return 0; } if(pr==NULL) printf(\错误!此分区不存在或未分配作业或前后分区都不空闲!\\n\ else printf(\分区%s回收完毕!\\n\ return 0; } allocate(int s){ TABLE *pt=NULL,*q; for(pt=tab;pt!=NULL;pt=pt->next){ if(pt->size>=s&&pt->state=='N'){ } pt->state='D'; if(pt->size>s){ q=getpch(TABLE); printf(\请输入分割出的分区ID:\\n\ scanf(\ q->size=pt->size-s; /*分割分区*/ } pt->size-=q->size; q->state='N'; q->addr=pt->addr+pt->size; if(pt->next!=NULL){ pt->next->prev=q; /*在空闲链中插入新的分区*/ q->next=pt->next; pt->next=q; q->prev=pt; return 0; } pt->next=q; q->prev=pt; q->next=NULL; return 0; }/*for*/ printf(\没有合适的分区,此次分配失败!\\n\return 0;