用对象的多重数组实现双链表

   在有些语言(例如FORTRAN)中不提供指针与对象数据类型,那么该如何实现双链表呢?我们将介绍运用数组和数组下标在逻辑上来构造双链表,让它表现的就像用指针实现的一样自然。


对象的多重数组表示

   如下图是一个用数组实现的双链表的逻辑图:

   对一组具有相同域的对象,每一个域都可以用一个数组来表示。上图说明了如何用三个数组实现双链表。动态几何的关键字存储在数组key中,而指针域存储在prev和next中。对于一个给定的下标x,key[x],prev[x],next[x]久共同组成了链表中的一个对象,即节点,在这种解释下,一个指针x即为指向数组key,prev和next的共同下标。

   在上图的链表中,关键字4的对象在关键字为16的对象的后面。对应地,关键字出现在key[2]上,关键字16出现在key[5]桑,故有next[5] = 2;prev[2] = 5.虽然常熟NIL(/)出现在表尾的next域和表头的prev域中,但我们通常用一个不指向数组中任何一个位置的整数(在我们的实现代码中,取NOEXIST为-1)来表示之。另外变量L存储了表头元素的下标。


分配和释放对象

    为向一个用双链表表示的动态集合中插入一个对象,需要分配一个当前指向链表表示中未被使用的对象的指针,即下标。那么,我们需要对链表中未被使用的空间进行管理,从而方便分配。
   在这里,我们利用指针域把自由对象组织成一个单链表,成为自由链表。自由链表仅用到next域,其中存放着下一个自由对象的下标,此链表头存储在free中。当链表L非空时,自由链表和双链表L将相互交错到一起,如下图所示。但是,一个空间要么存在于自由链表中,要么存在于双链表中,不可能同时存在于两者之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值