adjust.c

来自「模拟内存分配的c语言实现 六、 实验目的 了解用户程序分配内存以及回收所用内」· C语言 代码 · 共 77 行

C
77
字号
void adjust(BLOCK *h,BLOCK *p)
{
        BLOCK *s,*k,*t;
        int flag=0,figure=0;
        s=h->next;
        while(s && p)
        {
                if(s->endaddress+1==p->startaddress)
                {
                        s->endaddress=p->endaddress;
                        s->length+=p->length;
                        for(k=h;k;k=k->next)
                                if(k->next==p)
                                	break;
                        k->next=p->next;
                        free(p);
                        p=s->next;
                        flag=1;
                        if(!p)
                        	break;
                }
                else
                {
                        s=s->next;
                }
        }
        if(flag)
        {
                s=p;
                p=h;
                while(p->next!=s)
                        p=p->next;
        }
        k=h;
        while(k->next!=p)
        {
                k=k->next;
        }

        for(s=h;s;s=s->next)
        {
                if(s==p||!p||!s->next)
                        continue;
                if(s!=h && s->next==p && s->length>p->length)
                {
                        for(t=h;t;t=t->next)
                	{
                                if(t->next==s)
                                	break;
                	}
                        s->next=p->next;
                        p->next=s;
                        t->next=p;
                        figure=1;
                        break;
                }
                if(s->next->length>p->length)
                {
                        k->next=p->next;
                        p->next=s->next;
                        s->next=p;
                        figure=1;
                        break;
                }
        }
        if(p&&p->next&&h->next&&!figure&&((!s&&h->next!=p)||(h->next==p&&p->next))&&p->length>=p->next->length)
        {
                t=h;
                while(t->next)
                        t=t->next;
                k->next=p->next;
                t->next=p;
                p->next=NULL;
        }
        figure=0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?