设L是一个长度为n的双向链表,存储长度为m的数组key,prev和next中。假设这些数组由维护双链自由表F的两个过程ALLOCATE-OBJECT和FREE-OBJECT进行管理。又假设m个元素中,恰有n个元素在链表L上,m-n个在自由表上,给定链表L和自由表F,试写出一个过程COMPACTIFY-LIST(L,F),用来移动L中的元素使其占用数组中1,2,...,n的位置,调整自由表F以保持其正确性,并且占用数组中n+1,n+2,...,m的位置。要求所写的过程运行时间应为,且只使用固定量的额外存储空间。请证明所写的过程是正确的。
ALLOCATE-OBJECT() if free==NIL error "out of space" else x=free free=x.next return x FREE-OBJECT(x) x.next=free free=x