算法导论程序22--指针和对象的实现(Python)

对象的多数组表示:

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: 4
x.next: 8
4
>>> 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值