表擴張

我們假定表的存儲空間是一個槽的數組。當所有槽都已被使用時,表被填滿,此時裝載因子爲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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章