不用指针和对象数据类型来实现链表

当没有指针和对象时,应该怎么实现链表呢?参考算法导论,给出两种实现方式:

1、多重数组表示

对于双向链表而言,由三个长度一样的数组来表示,分别为Prev[n],Next[n],Value[n]。下标相同的三个数组元素组成一个链表元素。Value[n]里存放的是链表元素的值,Prev[n]和Next[n]里存放的是数组的索引,表示该链表元素的前面和后面分别是什么。链表中的第一个元素的前缀为空,因此可以在Prev数组相应位置存放-1,最后一个元素的后缀同样操作。链表头元素所在数组的索引存放在单独的一个变量中。

这个多重数组表示的链表为

 

 

2、单数组表示

在足够大的一维数组中,链表的每个元素占据一组连续位置,在这一组连续位置中,value、prev、next连续摆放。

 

分配和释放对象:

以多重数组为例,假设数组长度为m,当前动态数组包含n<=m个元素,这样n个对象表示目前在动态集合中的元素,而另外m-n个元素还未分配,我们将其组织起来组成一个自由表,以待分配。自由表仅用到next数组,且自由表表头置于另外一个变量中,自由表和已分配的动态表交错在一起,每个对象或在自由表,或在已分配的表中。

 

posted @ 2011-12-09 19:27  Cavia  阅读(756)  评论(0编辑  收藏  举报