算法导论程序22--指针和对象的实现(Python)
来源:互联网 发布:冰川网络股票代码 编辑:程序博客网 时间:2024/06/06 01:10
对象的多数组表示:
next数组:
key数组:
prev数组:
三个数组项key[x],next[x],prev[x]一起表示链表中的一个对象。
变量L:表头元素的下标。
对象的分配和释放:
假设多数组表示法中的各数组长度为m,且在某一时刻该动态集合含有n<=m个元素。则n个对象代表现存于该动态集合中的元素,而余下的m-n个对象是自由的。这些自由对象可用来表示将要插入该动态集合的元素。
我们把自有对象保存在一个单链表中,称为自由表(free list)。自由表只使用next数组,该数组只存储表中的next指针。自由表的表头保存在全局变量free中。
自由表类似于一个栈:下一个被分配的对象就是最后被释放的那个。
以下程序中实现了上图中的a和b
class pointer_object: def __init__(self,L,free,key,l_next,prev): self.L=L self.free=free self.key=key self.l_next=l_next self.prev=prev def allocate_object(self): if self.free==None: print("out of space") else: x=self.free print("x:",x) self.free=self.l_next[x-1] print("x.next:",self.free) return x def free_object(self,x): self.l_next[x-1]=self.free self.free=x def list_insert(self,x): self.l_next[x-1]=self.L if self.L!=None: self.prev[self.L-1]=x self.L=x self.prev[x-1]=None运行结果:
>>> L=7>>> free=4>>> key=[None,4,1,None,16,None,9,None]>>> l_next=[-1,3,-1,8,2,1,5,6]>>> prev=[None,5,2,None,7,None,-1,None]>>> po=pointer_object(L,free,key,l_next,prev)>>> po.allocate_object()x: 4x.next: 84>>> po.key[3]=25>>> po.list_insert(4)>>> po.l_next[-1, 3, -1, 7, 2, 1, 5, 6]>>> po.key[None, 4, 1, 25, 16, None, 9, None]>>> po.prev[None, 5, 2, None, 7, None, 4, None]>>>
阅读全文
0 0
- 算法导论程序22--指针和对象的实现(Python)
- 算法导论 第10章 10.3 指针和对象实现
- 《算法导论》笔记 第10章 10.3 指针和对象的实现
- 算法导论程序18-最大值和最小值(Python)
- 算法导论程序20--栈和队列(Python)
- 算法导论程序29--二叉搜索树的插入和删除(Python)
- 算法导论程序13-快速排序的描述(Python)
- 算法导论程序23--有根树的表示(Python)
- 算法导论程序30--红黑树的旋转(Python)
- 算法导论程序31--红黑树的插入(Python)
- 算法导论程序8--堆(Python)
- 算法导论程序16--基数排序(Python)
- 算法导论程序21--链表(Python)
- 算法导论程序6--随机算法(Python)
- 算法导论程序11--堆排序算法(Python)
- 算法导论程序4--矩阵乘法的分治算法(Python)
- 算法导论程序19-期望为线性时间的选择算法(Python)
- 双向链表的单指针实现(算法导论习题)
- Python描述器实现类型检查
- LTE中的 CDF PDF 简述
- .NET多线程编程(2):System.Threading.Thread类
- fatal One or more refs for names blocks change upload
- eclipse实现热部署和热启动
- 算法导论程序22--指针和对象的实现(Python)
- WPF X:Shared概述
- 随机非线性问题的随机方法
- 计算机研究生复试上机题目:顺时针螺旋矩阵简单实现
- MyBatis 延迟加载,一级缓存,二级缓存设置
- 函数调用原理与栈
- Java笔记
- 1002. 写出这个数 (20)
- Codeforces 808G Anthem of Berland[dp][kmp]