Ö÷´æ¿Õ¼äµÄ·ÖÅäÓë»ØÊÕʵÑ鱨¸æ

.

typedef int Status;

typedef struct free_table//¶¨ÒåÒ»¸ö¿ÕÏÐÇøËµÃ÷±í½á¹¹ {

int num; //·ÖÇøÐòºÅ long address; //ÆðʼµØÖ· long length; //·ÖÇø´óС int state; //·ÖÇø×´Ì¬ }ElemType;

typedef struct Node// ÏßÐÔ±íµÄË«ÏòÁ´±í´æ´¢½á¹¹ {

ElemType data;

struct Node *prior; //ǰÇ÷Ö¸Õë struct Node *next; //ºó¼ÌÖ¸Õë }Node,*LinkList;

LinkList first; //Í·½áµã LinkList end; //β½áµã

int flag;//¼Ç¼Ҫɾ³ýµÄ·ÖÇøÐòºÅ

Status Initblock()//¿ª´´´øÍ·½áµãµÄÄÚ´æ¿Õ¼äÁ´±í {

first=(LinkList)malloc(sizeof(Node)); end=(LinkList)malloc(sizeof(Node)); first->prior=NULL; first->next=end; end->prior=first; end->next=NULL; end->data.num=1; end->data.address=40; end->data.length=600; end->data.state=0; return OK; }

void sort()//·ÖÇøÐòºÅÖØÐÂÅÅÐò {

Node *p=first->next,*q; q=p->next;

for(;p!=NULL;p=p->next) {

for(q=p->next;q;q=q->next) {

¾«Æ·

.

if(p->data.num>=q->data.num) {

q->data.num+=1; } } } }

//ÏÔʾÖ÷´æ·ÖÅäÇé¿ö void show()

{ int flag=0;//ÓÃÀ´¼Ç¼·ÖÇøÐòºÅ Node *p=first; p->data.num=0; p->data.address=0; p->data.length=40; p->data.state=1; sort();

printf(\¡·Ö÷´æ¿Õ¼ä·ÖÅäÇé¿ö¡¶\\n\

printf(\ printf(\·ÖÇøÐòºÅ\\tÆðʼµØÖ·\\t·ÖÇø´óС\\t·ÖÇø×´Ì¬\\n\\n\ while(p) {

printf(\ if(p->data.state==0) printf(\¿ÕÏÐ\\n\\n\ else printf(\ÒÑ·ÖÅä\\n\\n\ p=p->next; }

printf(\ }

//Ê×´ÎÊÊÓ¦Ëã·¨

Status First_fit(int request) {

//ΪÉêÇë×÷Òµ¿ª±ÙпռäÇÒ³õʼ»¯ Node *p=first->next;

LinkList temp=(LinkList)malloc(sizeof(Node)); temp->data.length=request; temp->data.state=1; p->data.num=1; while(p) {

if((p->data.state==0)&&(p->data.length==request)) {//ÓдóСǡºÃºÏÊʵĿÕÏпé p->data.state=1;

¾«Æ·

.

return OK; break; }

else if((p->data.state==0) && (p->data.length>request)) {//ÓпÕÏпéÄÜÂú×ãÐèÇóÇÒÓÐÊ£Óà temp->prior=p->prior; temp->next=p;

temp->data.address=p->data.address; temp->data.num=p->data.num; p->prior->next=temp; p->prior=temp;

p->data.address=temp->data.address+temp->data.length; p->data.length-=request; p->data.num+=1; return OK; break; }

p=p->next; }

return ERROR; }

//×î¼ÑÊÊÓ¦Ëã·¨

Status Best_fit(int request) {

int ch; //¼Ç¼×îСʣÓà¿Õ¼ä Node *p=first;

Node *q=NULL; //¼Ç¼×î¼Ñ²åÈëλÖÃ

LinkList temp=(LinkList)malloc(sizeof(Node)); temp->data.length=request; temp->data.state=1; p->data.num=1;

while(p) //³õʼ»¯×îС¿Õ¼äºÍ×î¼ÑλÖà {

if((p->data.state==0) && (p->data.length>=request) ) {

if(q==NULL) { q=p;

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.state=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 Worst_fit(int request) {

int ch; //¼Ç¼×î´óÊ£Óà¿Õ¼ä Node *p=first->next;

Node *q=NULL; //¼Ç¼×î¼Ñ²åÈëλÖÃ

LinkList temp=(LinkList)malloc(sizeof(Node)); temp->data.length=request; temp->data.state=1; p->data.num=1;

while(p) //³õʼ»¯×î´ó¿Õ¼äºÍ×î¼ÑλÖà {

if(p->data.state==0 && (p->data.length>=request) ) {

if(q==NULL) {

q=p;

¾«Æ·

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)