用陣列描述的鍊錶叫做靜態鍊錶(也叫游標實現法)
陣列的元素由兩個資料域組成,data和cur,也就是說,陣列的每個下標都對應乙個data和乙個cur,資料域data,用來存放資料元素,游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標
我們對陣列的第乙個和最後乙個元素作為特殊元素處理,不存資料。我們通常把未被使用的陣列元素稱為備用鍊錶,而陣列第乙個元素,即下標為0的元素的cur就存放備用鍊錶的第乙個結點的下標,而陣列的最後乙個元素的cur則存放第乙個有數值的元素的下標,相當於單鏈表中的頭結點的作用,當整個鍊錶為空時,則為02。
例項演示:
上圖中,在乙和丁之間插入丙。
(1)動態鍊錶中,結點的申請使用的是malloc()函式。在靜態鍊錶中,操作的是陣列,因此必須自己實現這樣的函式,用來做插入操作。
解決辦法:將所有未被使用過的及已被刪除的分量用游標鏈成乙個備用鍊錶。每當插入時,從備用鍊錶上取得第乙個結點作為待插入的新結點。
(2)插入的演算法如下:
三、刪除
例子:上圖中,刪除甲。
(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中。
靜態鍊錶的優缺點
優點:
# 在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了順序儲存結構中的插入和刪除操作需要移動大量元素的缺點
缺點:
# 沒有解決連續儲存分配帶來的表長難以確定的問題
# 失去了順序儲存結構隨機訪問的特性
第三章 線性表 鏈式儲存結構(雙向鍊錶)
雙向鍊錶 double linked list 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。結點都有兩個指標域,乙個指向直接後繼,另乙個指向直接前驅。例項 鍊錶 雙向鍊錶 現在分析新增的情況 已經有1號英雄和5號英雄,現在要新增3號英雄 此時cur指向了1號英雄,hero指向3號英雄 ...
第三章 線性表 鏈式儲存結構(單鏈表)
線性表的鏈式儲存結構 是用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以是連續的,也可以是不連續的。這些資料元素可以存在記憶體未被占用的任意位置。為了表示每個資料元素ai與其直接後繼資料元素ai 1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其後繼的資訊 ...
線性表鏈式儲存結構
include include 線性表鏈式儲存結構 typedef struct lnodelnode,linklist int initlist linklist l 初始化 int endinsert linklist l,int e p next s return 1 末尾插入元素 int g...