如果用C/C++写链表的话,用指针会比较方便,但很多语言都没有指针,那么怎么实现比较好呢?游标是个不错的选择。
在用指针实现的链表中,有这样两个特点:
1.数据存在一组结构体中,并且每个结构体都有指向下一个结构体的指针。
2.一个新的结构体可以通过malloc获取内存,也可以用free来释放内存。
游标法也得满足这两个条件。满足条件1比较简单,用一个全局的结构体数组就行了;满足条件2的话可以保留一个表,如图:
0表示表头,然后他们的初始关系是这样这样:
当执行malloc功能时,我们把表头指向的单元拿出来使用,然后把表头指向下一个空单元,执行free功能时,将目标单元回收就行了。
这个表取名叫CursorSpace,下面给出CursorSpace的malloc和free的代码:
static Position CursorAlloc(void)
{
Position P;
P = CursorSpace[0].Next;
CursorSpace[0].Next = CursorSpace[P].Next;
return P;
}
static void CursorFree(Position P)
{
CursorSpace[ P ].Next = CursorSpace[ 0 ].Next;
CursorSpace[ 0 ].Next = P;
}
将代码和图结合起来试一试,应该很容易就能理解了。
下面给出完整代码:
1.头文件:</