程式語言:C++
前言:
- 節點:節點是連結串列的一個基本單元,包含兩部分——資料域和指標域,資料域用於儲存資料,指標域儲存下一個節點的地址,形成鏈結。
- 什麼是單連結串列:n個節點鏈結成一個連結串列,即為線性表(a1,a2,a3……)的鏈式儲存結構,每個節點只包含一個指標域的連結串列叫做單連結串列。
- 連結串列組成:頭節點、頭指標、節點。頭結點顧名思義就是第一個節點,並且頭結點的資料域一般為空,有時用來儲存連結串列的節點數等資訊,在連結串列中,頭結點不是必需要素。頭指標就是指向頭結點的指標,頭指標一般冠以連結串列的名字,並且頭指標是連結串列的必需要素。
- 空連結串列:沒有任何有效資料的節點的連結串列。例:
- 單連結串列的建立
建立單連結串列之前先要建立節點:
然後開始建立連結串列:
我們將建立連結串列的功能包裝成一個函式,引數如下:
第一個引數是我們在函式外建立的一個頭指標(也即一張空連結串列(包含頭結點)),第二個引數是我們希望連結串列所包含的節點個數
在此基礎上,我們有兩種建立連結串列的方式:頭插法、尾插法。
頭插法:
原理如下:將每次建立的新節點插入頭節點和上一個建立的節點之間。
步驟:
- 宣告一個指標p(用來生成新節點),和一個計數器變數i
- 初始化一張空連結串列(也就是建立一個頭指標),讓頭結點指標指向NULL
- 迴圈:
①生成一個新節點賦給p
②給節點賦值(例子中生成一個隨機數存入p->data)
③將節點插入頭結點和上一節點之間
程式碼實現:
尾插法:
原理如下:每次建立的新節點插在上一個節點後面(連結串列尾部)。
步驟:
- 宣告一個指標p(用來生成新節點),宣告一個尾指標r(方便往連結串列尾部插入新節點),一個計數器變數i
- 初始化一張連結串列(也就是建立一個頭指標),讓頭結點的指標指向NULL
- 讓尾指標r指向頭結點
- 迴圈:
①生成一個新節點賦給p
②給節點賦值
③將節點插入連結串列尾部
④保持尾節點的指標指向NULL(方便作為查詢等操作的判斷標誌)
程式碼實現:
-
連結串列資料的讀取
讀取指定節點存取的資料,必需從頭結點開始遍歷連結串列,直到找到指定節點然後讀取資料。
步驟:
①建立一個指標p(用來遍歷連結串列),和一個計數器i(p當前指向的節點)
②讓p指向第一個節點開始遍歷連結串列,同時i自增
③如果找到了指定節點,則讀取節點資料,並反饋資訊(以1為例)
④如果沒找節點,則反饋資訊(以返回0為例)
程式碼實現:
-
單連結串列資料的插入
遍歷連結串列到達指定位置後將資料插入即可。
步驟:
①建立指標p(遍歷連結串列),建立指標s(插入的節點),建立計數器變數i
②遍歷連結串列,到達指定位置將s插入
程式碼實現:
-
單連結串列資料的刪除
用一個指標遍歷到達指定節點處,然後進行刪除操作(改變節點指標指向,繞過待刪除節點即可),並索回所刪除的資料。
步驟:
①建立一個指標p遍歷連結串列,建立一個指標輔助刪除,一個計數器變數i
②遍歷至指定位置進行刪除操作
程式碼實現:
補充:其實完全可以不需要建立指標q,“q = p->next;p->next = q->next;”兩步可用“p->next = p->next->next”替代,效果相同。
注:
- 涉及到改變連結串列資料的操作時,應當使用引用傳遞
- 對於連結串列的各種操作並非一成不變,應當根據實際情況靈活變換