瞭解過線性表的鏈式儲存結構以後,有人就想出來用陣列來代替指標,來描述單連結串列。看看他們是怎麼做到的。
靜態連結串列
讓陣列的元素都由兩個資料域組成,data和cur。也就是說,陣列的每個下標都有對應的一個data和cur。資料域data,用來存放資料元素,而cur相當於單連結串列中的next指標,存放該元素的後繼在陣列中的下標,我們把cur叫做遊標。
這種用陣列描述的連結串列叫做靜態連結串列,我們把這種描述叫做遊標實現法。
另外我們對陣列第一個和最後一個元素作為特殊元素處理,不存資料。我們通常把未使用的陣列元素稱為備用連結串列。
陣列第一個元素,即下標為0的元素的cur存放備用連結串列的第一個節點的下標;而陣列最後一個元素的cur存放第一個有數值的元素的下標,相當於單連結串列中的頭節點的作用。
如下圖:

我們對靜態連結串列的插入和刪除操作簡單瞭解以下:
靜態連結串列中要解決的是:如何用靜態模擬動態連結串列的儲存空間的分配,需要時申請,無用時釋放。
靜態連結串列的插入

靜態連結串列的刪除

靜態連結串列的優缺點
- 在插入和刪除操作時,只需要修改遊標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點。
- 沒有解決連續記憶體分配帶來的表長度難以確定的問題。
- 失去了順序儲存結構隨機存取的特點。
迴圈連結串列
對於單連結串列,由於每個結點只儲存了向後的指標,到了尾標就停止了向後鏈的操作,這樣,當某一個結點就無法找到它的前驅結點了。
將單連結串列中終端結點的指標端由空指標改為指向頭結點,就使整個單連結串列形成一個環,這種頭尾相接的單連結串列稱為單迴圈連結串列,簡稱迴圈連結串列。
顯然解決了一個問題:當從一個結點出發,訪問連結串列的所有結點。

雙向連結串列
雙向連結串列:是在單連結串列的每個結點中,再設定一個指向其前驅結點的指標域。
雙向連結串列的好處:某個結點對前後結點的操作更快;
雙向連結串列的不足:一個結點,兩個指標,耗記憶體更大。
既然單連結串列可以由迴圈連結串列,那麼雙向連結串列當然也可以是迴圈表,其結構如下:

雙向連結串列的插入

雙向連結串列的刪除

關於線性表就整理到這裡了,文中有不對或不足的地方,希望大家能夠反饋給我,一起進步。
更多精彩內容,關注我的微信公眾號——Android機動車
