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;
}
{
//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;
}
解决方案 »
- 有会java 单字节加密解密的吗
- 正则表达式提取字符串的子字符串
- 安装 JBuilder9后在web中web Application, Servlet,Java Server Page等为什么都不能使用?在线等!
- Java中类似C语言中isdigi()或者isalpha()判断是否数字字母的函数是哪个?
- 请问哪里有visibroker for java可以下载?
- 初学者选那本书??请指教
- 请问各位,
- 菜鸟求助:jbuilder5安装问题!!!
- 如何学好JBuileder,从JAVA看起还是直接来?能否推荐一本好的JBuilder书?这厢有礼了。
- 【请教贴】怎么才能自动记录日志
- 请问:socket同时发送文本和图片的问题。
- 求教!还是类的问题,请多多指教.
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