《算法导论》笔记 第10章 10.3 指针和对象的实现
2014-04-16 17:01
344 查看
【笔记】
对象的多重数组表示:对一组具有相同域的对象,每一个域都可以用一个数组来表示。对象的单数组表示:一个对象占据存储中的一组连续位置,指针即指向某对所占存储区的第一个位置,后续位置可以通过加上相应的偏移量进行寻址。
分配和释放对象:使用废料收集器。
【练习】
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),且只能使用固定量的额外空间。请仔细论证你所给出的过程的正确性。
暂时懒得写!
相关文章推荐
- CSS页面遮罩
- windows2003可用gt630显卡驱动
- 《算法导论》笔记 第10章 10.3 指针和对象的实现
- DELL R720 在安装ESXI5.1之后,在存储器出现警告
- 初窥UIKit Dynamics
- c语言的重要概念
- 2-OMAPL138开发板快速体验
- Java排序算法优化--插入排序【温故而知新】
- Myeclipse10下java.lang.OutOfMemoryError: Java heap space的解决办法
- Java jdk的安装及环境变量设置
- [转]IOS 中文排序
- PHP 扩展库
- Linked List Cycle
- Visual C# 字体对话框 & 颜色对话框
- appcore.cpp ASSERT(AfxGetThread() == NULL);错误
- CSDN编程挑战之彩色石子(使用暴力破解法)
- 2014金山笔试_编写一个数组类 MyVector
- Linked List Cycle II
- lua程序设计 28.2 Metatables userdata程序范例
- 阳光梦:nginx上搭建HLS流媒体服务器 (4)-参考