資料結構 鍊錶(3)

2021-08-07 09:14:14 字數 2847 閱讀 5204

現在我們可以回頭總結一下我們的鍊錶:

- 鍊錶是乙個由節點組成的一條鏈。

- 每個節點包含兩條資訊:

- 序列中儲存的是一些資料

- 節點中有指向列表中下乙個節點的鏈結。

- 我們可以從第乙個單元格開始跟隨著link指標,遍歷整個鍊錶。

如同下圖所示(左邊是乙個節點,右邊是由節點組成的鍊錶)

- 鍊錶是用於儲存元素序列的資料結構。

- 每個元素與其他元素分開儲存。

- 然後將這些元素鏈結在一起成為乙個序列

例如我們從尾部插入乙個元素,過程如下:

從中間插入元素過程如下:

刪除元素如下:

struct node ;
struct node ;
發現沒,這個結構居然是被遞迴定義的!!,也就是說每生成乙個新的節點,就必然有乙個指向下乙個節點的指標生成。

在分析鍊錶的過程中,一定要記住,我們是需要畫圖理解的!!!

在peter jackson的電影《指環王》——「國王回歸」中,rohan通過山頂的一連串訊號火災警告了gondor的危險。 這個場景是乙個很好的例子,說明了在鍊錶中傳遞訊息的這個想法。

struct tower;
接下來,我們應該是建立第乙個節點:

// 為什麼我們要從最後乙個節點開始?因為它的成員是確定的

tower * head =

new tower;

head->name = 「san jose」;

head->

link

=null;

//建立乙個節點,並返回乙個指向當前節點的指標 

tower *createtower(string name, tower *

link)

接下來我們要把他們串起來:

head = createtower("santa clara", head);

head = createtower("mountain view", head);

head = createtower("palo alto", head);

head = createtower("menlo park", head);

head = createtower("redwood city", head);

head = createtower("millbrae", head);

head = createtower("bayshore", head);

head = createtower("san francisco", head);

當呼叫第乙個createtower的時候,他這樣執行(2)過程,為了按照要求,我也畫圖分析

最後我們展示一下我們的鍊錶:

//遍歷 

void signal(tower *start)

}

當節點不為空時,輸出節點的資料。從頭到尾遍歷。

#include

using namespace std;

/*宣告部分*/

struct tower;

/*函式宣告*/

tower *createtower(string name, tower*

link);

void signal(tower *start);

/*main函式*/

int main()

//建立乙個節點,並返回乙個指向當前節點的指標

tower *createtower(string name, tower *

link)

//遍歷

void signal(tower *start)

}

測試結果:

由此我們得到一般的節點的結構組成:

struct node;

資料結構3 鍊錶

鍊錶是儲存許多同型別的資料元素組成的有序列表。鍊錶如同火車,人數決定車箱數,人多就向系統申請多加乙個車廂,人少就去除乙個車廂。這種動態分配記憶體的方式,按需分配,可以避免記憶體的浪費。int p val int型別的指標p指向val 動態記憶體分配 就是程式在執行的時候向系統申請記憶體,程式執行結束...

面試 資料結構(3)(鍊錶)

1 除了用陣列描述線性表還可以用鍊錶描述線性表 2在鏈式描述中,線性表的元素在記憶體中的儲存位置是隨機的。每個元素都有乙個明確的指標或鏈指向線性表的下乙個元素的位置 即位址 陣列和鍊錶的區別 在陣列中,元素的位址是由數學公式決定的,而在鏈式描述中,元素的位址是隨機分布的 順序表是順序儲存,非順序訪問...

資料結構 鍊錶(3) 鍊錶的逆序

鍊錶的逆序 鍊錶的只逆序輸出,鍊錶不逆序,第二種是鍊錶的逆序。面試中經常考察鍊錶的逆序。總結鍊錶逆序的五個主要步驟 2 將當前結點的指標域指向當前結點的前乙個結點 3 將當前結點後移 4 將當前結點的前一結點的指標後移,進行迴圈 5 逆序之後的原來的頭指標的指標域為空。並建立新的頭結點 建立結構體 ...