8 初始單鏈表

2021-10-11 08:25:52 字數 1883 閱讀 5466

用一組任意的儲存單元儲存線性表的資料元素(這組儲存單元可以是連續的,也可以是不連續的,甚至是零散的分布在記憶體的任意位置,鍊錶中元素的邏輯次序與物理次序不一定相同)

那怎麼表示資料元素之間的邏輯關係呢?

在儲存自己內容的同時也儲存下乙個元素的位址。儲存資料元素的域稱為資料域,儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱作指標或鏈。這兩部分資訊組成ai的儲存映象稱為結點(node)。n個結點(ai(1≤i≤n)的儲存映象鏈結成乙個鍊錶,即為線性表。把鍊錶中第1個結點的儲存位置叫頭指標。最後乙個元素意味著沒有直接後繼規定最後乙個結點指標為空(通常用null或^表示)

單鏈表由頭指標唯一確定,因此單鏈表可用頭指標名字來命名。

單鏈表、雙向鍊錶、迴圈鍊錶

結點只有乙個指標域的鍊錶稱為單鏈表或線性鍊錶

結點有兩個指標域的鍊錶稱為雙鏈表

首尾相接的鍊錶叫迴圈鍊錶

為了更加方便對鍊錶進行操作,會在單鏈表的第1個結點前附設乙個頭結點.頭結點的資料域可以不儲存任何資訊,也可以儲存如線性表的長度等附加資訊,頭結點的指標域儲存指向線性表第1個元素的結點。

討論1:表示空表

討論2:有頭結點有什麼好處?

①有了頭結點,對在第一元素結點前插入結點和刪除第一結點,其操作與其它結點的操作就統一了

②便於空表和非空表的統一處理

當鍊表不設頭結點時,假設l為單鏈表的頭指標,它應該指向首元結點,則當單鏈表為長度n為0的空表時,l指標為空(判定空表的條件可記為:lnull)。增加頭結點後,無論鍊錶是否為空,頭指標都是指向頭結點的非空指標。頭指標指向頭結點。若為空表,則頭結點的指標域為空(判定空表的條件可記為:l ->next null)

順序表每個元素的儲存位置都可從線性表的起始位置計算得到。而在單鏈表中,各個元素的儲存位置都是隨意的。取得第i個資料元素必須從頭指標出發順鏈進行尋找,也稱為順序訪問的訪問結構。之前說的順序表是隨機訪問而鍊錶是順序儲存

單鏈表是由若干個結點構成,所以先定義一下結點。每乙個結點都是有兩部分組成,一部分是資料元素本身(資料域data)其資料型別根據實際問題的需要確定。另一部分是指向下乙個元素(結點)的指標(指標域next)存放下乙個元素的位址,結點可以用c語言中的結構體實現當中包含兩個成員。

單鏈表的初始化

方法一 include using namespace std struct listnode class solution cout head val return positiveoutput head next 該函式的作用是倒序輸出結點值 listnode reverseoutput lis...

單鏈表(合併單鏈表)

單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...

Day8 陣列模擬單鏈表

這個鍊錶啊,首先new是很慢的 所以我們要用陣列取模擬鍊錶的操作 主要變數有head 可以當作頭也可以當作尾部,初始化為 1 1就是鍊錶最後乙個元素的下乙個下標 idx 就是被操作的第i個數 val i 表示第i個數的值 ord i 表示第i個數的後繼 三個操作 插入頭部 大部分的操作都是這個 插入...