Space AllocBuddy(FreeList &avail, int n)
{
    //avail[0..m]为可利用空间表, n为申请分配量, 若有不小于n的空闲块,
    //则分配相应的存储块, 并返回其首地址, 否则返回NULL
    for(k=0; k<=m && (avail[k].nodesize < n+1 || !avail[k].first); ++k);//查找满足分配要求的子表
    if(k>m) return NULL;//分配失败, 返回NULL;
    else {//可进行分配
        pa = avail[k].first;//指向可分配子表的第一个节点
        pre = pa->llink; suc = pa->rlink;//分配指向前驱和后继
        if(pa == suc) avail[k].first = NULL;//分配后该子表变为空表
        else {//从子表删除*pa节点
            pre->rlink = suc; suc->llink = pre; avail[k].first = suc;
        }
    }
    for(i = 1; avail[k-i].nodesize >= n+1; ++i) {
        pi = pa + pow(2, k-i); pi-> rlink = pi; pi ->llink = pi;
        pi -> tag = 0; pi -> kval = k-i; avail[k-i].first = pi;
    }//将剩余块插入相应子表
    pa -> tag = 1; pa -> kval = k-(--i);
    return pa;
}

解决方案 »

  1.   

    import   java.io.*;   
        
        public   class   List     
        
        {   
        
        /*用变量来实现表头*/   
        
        private   Node   Head=null;   
        
        private   Node   Tail=null;   
        
        private   Node   Pointer=null;   
        
        private   int   Length=0;   
        
           
        
      public   void   deleteAll()   
        
        /*清空整个链表*/   
        
        {   
        
        Head=null;   
        
        Tail=null;   
        
        Pointer=null;   
        
        Length=0;   
        
        }   
        
        
        
        public   void   reset()   
        
        /*链表复位,使第一个结点   
        
      成为当前结点*/   
        
        {   
        
        Pointer=null;   
        
        }   
        
        
        
        public   boolean   isEmpty()   
        
        /*判断链表是否为空*/   
        
        {   
        
        return(Length==0);   
        
        }   
        
        
        
        public   boolean   isEnd()   
        
        /*判断当前结点是否   
        
      为最后一个结点*/   
        
        {   
        
        if(Length==0)   
        
        throw   new   java.lang.NullPointerException();   
        
        else   if(Length==1)   
        
        return   true;   
        
        else   
        
        return(cursor()==Tail);   
        
        }   
        
        public   Object   nextNode()   
        
        /*返回当前结点的下一个结点的值,   
        
      并使其成为当前结点*/   
        
        {   
        
        if(Length==1)   
        
        throw   new   java.util.NoSuchElementException();   
        
        else   if(Length==0)   
        
        throw   new   java.lang.NullPointerException();   
        
        else   
        
        {   
        
        Node   temp=cursor();   
        
        Pointer=temp;   
        
        if(temp!=Tail)   
        
        return(temp.next.data);   
        
        else   
        
        throw   new   java.util.NoSuchElementException();   
        
        }   
        
        }   
        
        public   Object   currentNode()   
        
        /*返回当前结点的值*/   
        
        {   
        
        Node   temp=cursor();   
        
        return   temp.data;   
        
        }   
        
           
        
        public   void   insert(Object   d)   
        
        /*在当前结点前插入一个结点,   
        
      并使其成为当前结点*/   
        
        {   
        
        Node   e=new   Node(d);   
        
        if(Length==0)   
        
        {   
        
        Tail=e;   
        
        Head=e;   
        
        }   
        
        else   
        
        {   
        
        Node   temp=cursor();   
        
        e.next=temp;   
        
        if(Pointer==null)   
        
        Head=e;   
        
        else   
        
        Pointer.next=e;   
        
        }   
        
        Length++;   
        
        }   
        
        public   int   size()   
        
        /*返回链表的大小*/   
        
        {   
        
        return   (Length);   
        
        }   
        
        public   Object   remove()   
        
        /*将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/   
        
        {   
        
        Object   temp;   
        
        if(Length==0)   
        
        throw   new   java.util.NoSuchElementException();   
        
        else   if(Length==1)   
        
        {   
        
        temp=Head.data;   
        
        deleteAll();   
        
        }   
        
        else   
        
        {   
        
        Node   cur=cursor();   
        
        temp=cur.data;   
        
        if(cur==Head)   
        
        Head=cur.next;   
        
        else   if(cur==Tail)   
        
        {   
        
        Pointer.next=null;   
        
        Tail=Pointer;   
        
        reset();   
        
        }   
        
        else   
        
        Pointer.next=cur.next;   
        
        Length--;   
        
        }   
        
        return   temp;   
        
        }   
        
        private   Node   cursor()   
        
        /*返回当前结点的指针*/   
        
        {   
        
        if(Head==null)   
        
        throw   new   java.lang.NullPointerException();   
        
        else   if(Pointer==null)   
        
        return   Head;   
        
        else   
        
        return   Pointer.next;   
        
        }   
        
           
        
        public   static   void   main(String[]   args)   
        
        /*链表的简单应用举例*/   
        
        {   
        
        List   a=new   List   ();   
        
        for(int   i=1;i<=10;i++)   
        
        a.insert(new   Integer(i));   
        
        System.out.println(a.currentNode());   
        
        while(!a.isEnd())   
        
        System.out.println(a.nextNode());   
        
        a.reset();   
        
        while(!a.isEnd())   
        
        {   
        
        a.remove();   
        
        }   
        
        a.remove();   
        
        a.reset();   
        
        if(a.isEmpty())   
        
        System.out.println("There   is   no   Node   in   List     \n");   
        
        System.in.println("You   can   press   return   to   quit\n");   
        
        try   
        
        {   
        
        System.in.read();   
        
      //确保用户看清程序运行结果   
        
        }   
        
        catch(IOException   e)   
        
        {}   
        
        }   
        
        }   
        
        class   Node   
        
        /*构成链表的结点定义*/   
        
        {   
        
        Object   data;   
        
        Node   next;   
        
        Node(Object   d)   
        
        {   
        
        data=d;   
        
        next=null;   
        
        }   
        
        }
    ===============================================
    以上是链表的简单操作,我没看你的程序
      

  2.   

    http://community.csdn.net/Expert/topic/5194/5194317.xml?temp=.1092646
    http://community.csdn.net/Expert/topic/5194/5194317.xml?temp=.1092646
    http://community.csdn.net/Expert/topic/5194/5194317.xml?temp=.1092646