資料結構 鍊錶

2021-10-24 16:23:55 字數 1605 閱讀 5440

鍊錶是一系列的儲存資料元素的單元通過指標串接起來形成的,因此每個單元至少有兩個域,乙個域用於資料元素的儲存,另乙個或兩個域是指向其他單元的指標。這裡具有乙個資料域和多個指標域的儲存單元通常稱為節點。

1.單向鍊錶

單向鍊錶只有乙個指標域,在整個節點中資料域用來儲存資料元素,指標域用於指向下乙個具有相同結構的節點

單向鍊錶中,每個節點的資料域都是通過乙個object類的物件引用來指向資料元素,與陣列類似,單向鍊錶中的節點也具有乙個線性次序,即如果節點a1的next引用指向節點a2,則a1就是a2的直接前驅,a2是a1的直接後續。只能通過前驅節點找到後續節點,而無法從後續節點找到前驅節點。

特點:資料元素的儲存對應的是不連續的儲存空間,每個儲存節點對應乙個需要儲存的資料元素。每個節點是有資料域和指標域組成。元素之間的邏輯關係通過儲存節點之間的鏈結關係反映出來。

邏輯上相鄰的節點物理上不必相鄰。

優點:1.插入、刪除靈活。 2.有元素才會分配結點空間,不會有閒置的結點。

缺點:1.比順序儲存結構的儲存密度小

2.查詢結點時鏈式儲存要比順序儲存慢

2.雙向鍊錶

要在單向鍊錶中找到某個節點的前驅節點,必須從鍊錶的頭節點出發依次向後尋找,但是需要o(n)時間。為此可以擴充套件單向鍊錶的節點結構,使得通過乙個節點的引用,不但能夠訪問其後續節點,也訪問前驅節點。擴充套件單向鍊錶節點結構的方法是,在單鏈表節點結構中新增加乙個域,該域用於指向節點的直接前驅節點。該鍊錶稱為雙向鍊錶。雙向鍊錶可以從兩個方向遍歷。

在使用雙向鍊錶實現鏈結表時,為使程式設計更加簡潔,使用帶兩個啞元節點的雙向鍊錶來實現鏈結表。其中乙個是頭節點,另乙個是尾節點,都不存放資料元素,頭節點的pre為空,尾節點的next為空。

3.鍊錶和陣列的區別

3.1區別

1.陣列靜態分配記憶體,鍊錶動態分配記憶體

2.陣列在記憶體中是連續的,鍊錶是不連續的

3.陣列利用下標定位,查詢的時間複雜度是o(1),鍊錶通過遍歷定位元素,查詢的時間複雜度是o(n)

4.陣列插入和刪除需要移動其他元素,時間複雜度是o(n),鍊錶的插入或刪除不需要移動其他元素,時間複雜度是o(1)。

3.2 陣列的優點和缺點

優點:1.隨機訪問性比較強,可以通過下標進行快速定位

2.查詢速度快

缺點:1.插入和刪除的效率低,需要移動其他元素。

2.會造成記憶體浪費,因為記憶體是連續的,所以在申請陣列的時候必須規定其記憶體的大小,如果不合適,就會造成記憶體的浪費。

3.記憶體空間要求高,建立乙個陣列,必須要有足夠的連續記憶體空間

4.陣列的大小是固定的,在建立陣列的時候已經規定好,不能動態拓展。

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...

資料結構 鍊錶

鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...

資料結構 鍊錶

一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...