表扩张

来源:互联网 发布:微信发淘宝优惠券链接 编辑:程序博客网 时间:2024/05/17 00:51

我们假定表的存储空间是一个槽的数组。当所有槽都已被使用时,表被填满,此时装载因子为1.于是在某些软件环境下,当试图像一个满的表插入一个数据项时,唯一的选择就是报错退出。但我们假定,我们的软件环境与很多现代软件系统一样,提供一个内存管理系统系统,可以根据需要分配和释放内存块,因此当试图像一个满的表插入一个数据项,我们可以扩张表–分配一个包含更多槽的新表。由于我们总是需要表位于连续的内存空间中,因此我们为更大的新表分配一个新的数组,然后将数据项从旧表复制到新表中。
一个常用的风分配新表的启发式策略是:为新表分配2倍于旧表的槽。如果只允许插入操作,那么装载因子总是保持在1/2以上,因此,浪费的空间永远不会超过总空间的一半。

伪代码

TABLE-INSERT(T,x){if(T.size==0){为T表分配一个槽;T.size=1;}if(T.num==T.size){allocate new-table with 2*T.size slots;insert all iterms in T.table into new-table;free T.table;T.table=new-table;T.size=2*T.size;}insert x into T.size;T.num=T.num+1;}
0 0
原创粉丝点击