數據結構筆記——線性表(下)

瞭解過線性表的鏈式存儲結構之後,有人就想出來用數組來代替指針,來描述單鏈表。看看他們是怎麼作到的。數組

靜態鏈表

讓數組的元素都由兩個數據域組成,data和cur。也就是說,數組的每一個下標都有對應的一個data和cur。數據域data,用來存放數據元素,而cur至關於單鏈表中的next指針,存放該元素的後繼在數組中的下標,咱們把cur叫作遊標。微信

這種用數組描述的鏈表叫作靜態鏈表,咱們把這種描述叫作遊標實現法。指針

另外咱們對數組第一個和最後一個元素做爲特殊元素處理,不存數據。咱們一般把未使用的數組元素稱爲備用鏈表orm

數組第一個元素,即下標爲0的元素的cur存放備用鏈表的第一個節點的下標;而數組最後一個元素的cur存放第一個有數值的元素的下標,至關於單鏈表中的頭節點的做用。cdn

以下圖: blog

這裏寫圖片描述

咱們對靜態鏈表的插入和刪除操做簡單瞭解如下:圖片

靜態鏈表中要解決的是:如何用靜態模擬動態鏈表的存儲空間的分配,須要時申請,無用時釋放。內存

靜態鏈表的插入

這裏寫圖片描述

靜態鏈表的刪除

這裏寫圖片描述

靜態鏈表的優缺點

  • 在插入和刪除操做時,只須要修改遊標,不須要移動元素,從而改進了在順序存儲結構中的插入和刪除操做須要移動大量元素的缺點。
  • 沒有解決連續內存分配帶來的表長度難以肯定的問題。
  • 失去了順序存儲結構隨機存取的特色。

循環鏈表

對於單鏈表,因爲每一個結點只存儲了向後的指針,到了尾標就中止了向後鏈的操做,這樣,當某一個結點就沒法找到它的前驅結點了。it

將單鏈表中終端結點的指針端由空指針改成指向頭結點,就使整個單鏈表造成一個環,這種頭尾相接的單鏈表稱爲單循環鏈表,簡稱循環鏈表io

顯然解決了一個問題:當從一個結點出發,訪問鏈表的全部結點。

這裏寫圖片描述

雙向鏈表

雙向鏈表:是在單鏈表的每一個結點中,再設置一個指向其前驅結點的指針域

雙向鏈表的好處:某個結點對先後結點的操做更快;

雙向鏈表的不足:一個結點,兩個指針,耗內存更大。

既然單鏈表能夠由循環鏈表,那麼雙向鏈表固然也能夠是循環表,其結構以下:

這裏寫圖片描述

雙向鏈表的插入

雙向鏈表的刪除

這裏寫圖片描述

關於線性表就整理到這裏了,文中有不對或不足的地方,但願你們可以反饋給我,一塊兒進步。

更多精彩內容,關注個人微信公衆號——Android機動車

相關文章
相關標籤/搜索