10.3-4 我们常常希望一个双链表中的所有元素在存储器中能够紧凑地排列在一起,例如使用多重数组表示中的前m个下标位置(在一个分页的虚拟计算机环境中情况就是这样)。假设链表以外没有指向链表元素的指针,请说明应如何实现过程ALLOCATE-OBJECT和FREE-OBJECT,才能使这种表示比较紧凑。(提示:使用栈的数组实现。)
分析与解答:
假设链表中已有y个元素,并且已经紧凑排列。令top = y +1,表示下一个将要分配的指针位置
在分配空间时很简单:
ALLOCATE-OBJECT分配时,只需要top++,同时在双链表L的头部增加一个元素。
在释放空间时稍微复杂:
FREE-OBJECT释放时,若x和y相同,则只需要从双链表L中删除元素x,同时top--;若x<y,则需要将x删除,同时将元素y调整到x的位置,然后top--
整个过程如下: