日期:2014-05-20  浏览次数:20750 次

这个算法如何用java实现?
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;
}

------解决方案--------------------
菜鸟,不知道
------解决方案--------------------

------解决方案--------------------
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();