資料結構 鍊錶詳解

2022-03-20 06:09:44 字數 1168 閱讀 7901

本篇隨筆就資料結構——鍊錶進行講解。鍊錶是一種特別實用的資料結構,我把它理解為陣列的公升級版,也就是在陣列的基礎上,它能做到在任意位置新增或者刪除元素,而不影響其他元素。鍊錶還是我們進行圖論學習時,圖的常用儲存方式——鄰接表(鏈式前向星)的實現基礎。學習鍊錶需要讀者具有一定的語法基礎,最好會一點點指標。(不會也沒關係,我們主要講解陣列模擬鍊錶)

鍊錶,顧名思義,就是帶鏈的表。我已經說過,鍊錶屬於陣列的加強版。那我們可以借助陣列來理解鍊錶:如果說陣列是一長排連在一起的「方塊」的話,那麼鍊錶就是把這些方塊「拉開「,每個方塊還有兩個箭頭,分別指向這個方塊前面的方塊和後面的方塊。

這樣我們就可以理解,為什麼鍊錶可以支援隨機插入和刪除了。從某種意義上來說,這裡的每乙個方塊都是離散的,我們在某兩點插入的時候,只需要把要插入的元素,這個元素目標位置前面的元素、後面的元素的箭頭改一下,就做到了插入的操作。刪除同理。

根據剛才的理解,我們可以發現,我們可以用乙個結構體來模擬每乙個方塊,結構體中存乙個元素和兩個指標,指標分別指向上乙個元素的位置和下乙個元素的位置。但是蒟蒻不會指標指標的實現比較麻煩,而且在除錯的時候也不是很理想。所以我們來想指標的本質就是告訴你乙個位置,那麼針對於」加強陣列「鍊錶來講,這個位置可以用什麼來表示呢?

對,陣列下標。

所以我們剛才的結構體就可以簡化,變成存乙個元素和兩個int變數(儲存陣列下標)。這樣,我們就可以用結構體陣列模擬鍊錶的實現。

鍊錶實現的精髓就是更改指標,改掉了三個元素(前,中,後)的指標使鍊錶合法,就完成了我們需要做的操作,本部分不再就每段**進行過多講解,請大家自行理解**含義,最好借助紙筆推演,看的會更明白一些。

我們初始化鍊錶的時候,要根據題目意思處理開頭的第乙個元素,這很重要!並且,我們把所有的指標都清成-1,這樣保證了鍊錶初始絕對合法。

void init()

void insert_left(int pos,int k)//把元素k插入到pos元素之前

void insert_right(int pos,int k)//把元素k插入到pos元素之後

void remove(int x)

void print()

}

資料結構詳解 鍊錶

鍊錶其實和陣列一樣,可以儲存一串元素.但又與陣列不同,那就是陣列是以下標進行儲存的,例如a 1 a 2 a 3 等,而鍊錶則是根據許多數字的前後關係的數字進行儲存的,其原理類似於圖論中的鄰接表,所儲存的序列並不是有序的,而是儲存這個數的前面 next 和這個數的後面 pre 來得到這一串有序的序列的...

資料結構 鍊錶詳解

1.什麼是鍊錶?鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。2.鍊錶和陣列的區別?線性表包括陣列和鍊錶兩種,陣列是採用連續的儲存空間,陣列具有隨機儲存的特性,什麼是隨...

資料結構之 鍊錶詳解

cpp view plain copy typedef struct lnode cpp view plain copy void initlist linklist l 樂樂站在第乙個,星星站在樂樂 的前面,呆子站在星星的前面 依次排列,這樣樂樂會最終站在隊尾 這就是頭插法建立單鏈表 cpp vi...