《算法导论》笔记 第10章 10.3 指针和对象的实现

本文介绍了对象的多重数组表示和单数组表示两种存储方式,并探讨了对象的分配和释放过程。通过具体实例,如画出特定序列在不同表示形式下的存储形态,以及实现ALLOCATE-OBJECT和FREE-OBJECT过程的方法,加深了对存储管理和内存利用的理解。
摘要由CSDN通过智能技术生成

【笔记】

对象的多重数组表示:对一组具有相同域的对象,每一个域都可以用一个数组来表示。

对象的单数组表示:一个对象占据存储中的一组连续位置,指针即指向某对所占存储区的第一个位置,后续位置可以通过加上相应的偏移量进行寻址。

分配和释放对象:使用废料收集器。


【练习】


10.3-1 请画出序列 <13,4,8,19,5,11> 存储在以多重数组表示的双链表中的形式,令画出在单数组表示下的形式。



10.3-2 对一组用单数组表示实现的同构对象,写出其过程ALLOCATE-OBJECT和FREE-OBJECT。


10.3-3 在过程ALLOCATE-OBJECT和FREE-OBJECT的实现中,为什么不需要重置对象的prev域。

分配内存时只需要找到该对象(要分配)以及其下一个对象(下一次分配)即可,不需要求前驱。


10.3-4 我们常常希望一个双链表中的所有元素在存储器中能够紧凑地排列在一起,例如使用多重数组表示中的前m个下标位置。假设链表以外没有指向链表元素的指针,请说明应如何实现过程ALLOCATE-OBJECT和FREE-OBJECT,才能使这种表示比较紧凑。

释放的空间放入栈中,申请空间时,若栈非空,弹出栈中的元素做分配,若栈为空,顺序分配空间即可。


10.3-5 设L是一长度为m的双链表,存储在长度为n的数组key、next和prev中。假设这些数组由维护双链自由表的F的两个过程ALLOCATE-OBJECT和FREE-OBJECT来操纵。进一步假设在数组的n个元素中,有m个在表L中,n-m个在自由表中。请写出一个过程COMPACTIFY-LIST(L,F),对给定的表L和自由表F,移动L中的元素,使他们占有数组中的1,2,3...m位置,同时调节自由表F使之保持正确,并占有数组位置m+1,m+2,....,n。所给出的过程的运行时间应该是θ(m),且只能使用固定量的额外空间。请仔细论证你所给出的过程的正确性。

暂时懒得写!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值