第三章 線性表---鏈式存儲結構(靜態鏈表)

用數組描述的鏈表叫作靜態鏈表(也叫遊標實現法)算法

 
數組的元素由兩個數據域組成,data和cur,也就是說,數組的每一個下標都對應一個data和一個cur,數據域data,用來存放數據元素,遊標cur至關於單鏈表中的next指針,存放該元素的後繼在數組中的下標
 
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客
 
咱們對數組的第一個和最後一個元素做爲特殊元素處理,不存數據。咱們一般把未被使用的數組元素稱爲備用鏈表,而數組第一個元素,即下標爲0的元素的cur就存放備用鏈表的第一個結點的下標,而數組的最後一個元素的cur則存放第一個有數值的元素的下標,至關於單鏈表中的頭結點的做用,當整個鏈表爲空時,則爲02。
 
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客
 
實例演示:
 
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客
     
上圖中,在乙和丁之間插入丙。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客


         (1) 動態鏈表中,結點的申請使用的是malloc()函數。在靜態鏈表中,操做的是數組,所以必須本身實現這樣的函數,用來作插入操做。  

        解決辦法:將全部未被使用過的及已被刪除的份量用遊標鏈成一個備用鏈表。每當插入時,從備用鏈表上取得第一個結點做爲待插入的新結點。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客



         (2)插入的算法以下: 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客 
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客 



3、刪除 

         例子:上圖中,刪除甲。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客


         (1)動態鏈表中,結點的申請使用的是free()函數。在靜態鏈表中,操做的是數組,所以必須本身實現這樣的函數,用來作刪除操做。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客 
第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客 

        其中,j=L[999].cur=1, L[k].cur=L[j].cur,即:L[999].cur=L[1].cur=2。意思是:甲已刪除,如今乙是第一個元素。 

        代碼中的:Free_SSL(L,j);以下。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客


        代碼中,space[1].cur=space[0].cur=8,意思是:把8給「甲」所在下標爲1的份量的cur。space[0].cur=k=1,意思是:讓刪除的位置成爲第一個優先空位,把它存入第一個元素(下標爲0)處的cur中。 

第三章 線性表---鏈式存儲結構(靜態鏈表) - 影魔 - 影魔的博客
 
 
靜態鏈表的優缺點
優勢:
# 在插入和刪除操做時,只須要修改遊標,不須要移動元素,從而改進了順序存儲結構中的插入和刪除操做須要移動大量元素的缺點
缺點:
# 沒有解決連續存儲分配帶來的表長難以肯定的問題
# 失去了順序存儲結構隨機存取的特性