读书人

这个算法怎么用java实现

发布时间: 2012-02-11 09:51:35 作者: rapoo

这个算法如何用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();



  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;

  }

  }
===============================================
以上是链表的简单操作,我没看你的程序
[解决办法]
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

读书人网 >J2SE开发

热点推荐