1. 程式人生 > >資料結構之雜湊表與連結串列、陣列

資料結構之雜湊表與連結串列、陣列

雜湊表

主要描述雜湊表的定義:通過關鍵碼尋找值的資料對映結構,類似於查字典

當存在雜湊衝突時,有兩種常用的方式:開發定址法和鏈地址法

開發定址法通俗的來說就是判斷該地址是否存資料,沒存就放進去,存了就找下一個地址,依次類推,問題是如果空間不足,無法處理衝突。

鏈地址法是通過例如雜湊演算法為H(key)=key mod 16,將遇到雜湊衝突的資料存入該結點的最後鏈結點插入即可,是陣列和連結串列的結合體

連結串列與陣列區別

      連結串列的特性是在中間任意位置新增刪除元素的都非常的快,不需要移動其它的元素。通常連結串列每一個元素都要儲存一個指向下一個元素的指標(單鏈表)。雙鏈表的話每個元素即要儲存到下一個元素的指標,還要儲存一個上一個元素的指標。迴圈連結串列則把最後一個元素中儲存下一個元素指標指向第一個元素。   
        陣列是一組具有相同型別和名稱的變數的集合。這些變數稱為陣列的元素,每個陣列元素都有一個編號,這個編號叫做下標,我們可以通過下標來區別這些元素。陣列元素的個數有時也稱之為陣列的長度。

從邏輯結構來看 

A-1. 陣列必須事先定義固定的長度(元素個數),不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數,出現溢位現象;當資料減少時,造成記憶體浪費。陣列中插入、刪除資料項時,需要移動其它資料項。 
A-2. 連結串列動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項。 

從記憶體儲存來看 

B-1. (靜態)陣列從棧中分配空間, 對於程式設計師方便快速,但是自由度小 
B-2. 連結串列從堆中分配空間, 自由度大但是申請管理比較麻煩.