【資料結構】線性表-單連結串列

i可不简单發表於2024-03-31

程式語言:C++

前言:

  • 節點:節點是連結串列的一個基本單元,包含兩部分——資料域和指標域,資料域用於儲存資料,指標域儲存下一個節點的地址,形成鏈結。
  • 什麼是單連結串列:n個節點鏈結成一個連結串列,即為線性表(a1,a2,a3……)的鏈式儲存結構,每個節點只包含一個指標域的連結串列叫做單連結串列。
  • 連結串列組成:頭節點、頭指標、節點。頭結點顧名思義就是第一個節點,並且頭結點的資料域一般為空,有時用來儲存連結串列的節點數等資訊,在連結串列中,頭結點不是必需要素。頭指標就是指向頭結點的指標,頭指標一般冠以連結串列的名字,並且頭指標是連結串列的必需要素。
  • 空連結串列:沒有任何有效資料的節點的連結串列。例:
  1. 單連結串列的建立
    建立單連結串列之前先要建立節點:

然後開始建立連結串列:
我們將建立連結串列的功能包裝成一個函式,引數如下:
第一個引數是我們在函式外建立的一個頭指標(也即一張空連結串列(包含頭結點)),第二個引數是我們希望連結串列所包含的節點個數

在此基礎上,我們有兩種建立連結串列的方式:頭插法、尾插法。

頭插法:
原理如下:將每次建立的新節點插入頭節點和上一個建立的節點之間。

步驟:

  • 宣告一個指標p(用來生成新節點),和一個計數器變數i
  • 初始化一張空連結串列(也就是建立一個頭指標),讓頭結點指標指向NULL
  • 迴圈:
    ①生成一個新節點賦給p
    ②給節點賦值(例子中生成一個隨機數存入p->data)
    ③將節點插入頭結點和上一節點之間

程式碼實現:

尾插法:
原理如下:每次建立的新節點插在上一個節點後面(連結串列尾部)。

步驟:

  • 宣告一個指標p(用來生成新節點),宣告一個尾指標r(方便往連結串列尾部插入新節點),一個計數器變數i
  • 初始化一張連結串列(也就是建立一個頭指標),讓頭結點的指標指向NULL
  • 讓尾指標r指向頭結點
  • 迴圈:
    ①生成一個新節點賦給p
    ②給節點賦值
    ③將節點插入連結串列尾部
    ④保持尾節點的指標指向NULL(方便作為查詢等操作的判斷標誌)

程式碼實現:

  1. 連結串列資料的讀取
    讀取指定節點存取的資料,必需從頭結點開始遍歷連結串列,直到找到指定節點然後讀取資料。
    步驟:
    ①建立一個指標p(用來遍歷連結串列),和一個計數器i(p當前指向的節點)
    ②讓p指向第一個節點開始遍歷連結串列,同時i自增
    ③如果找到了指定節點,則讀取節點資料,並反饋資訊(以1為例)
    ④如果沒找節點,則反饋資訊(以返回0為例)
    程式碼實現:

  2. 單連結串列資料的插入
    遍歷連結串列到達指定位置後將資料插入即可。
    步驟:
    ①建立指標p(遍歷連結串列),建立指標s(插入的節點),建立計數器變數i
    ②遍歷連結串列,到達指定位置將s插入
    程式碼實現:

  3. 單連結串列資料的刪除
    用一個指標遍歷到達指定節點處,然後進行刪除操作(改變節點指標指向,繞過待刪除節點即可),並索回所刪除的資料。
    步驟:
    ①建立一個指標p遍歷連結串列,建立一個指標輔助刪除,一個計數器變數i
    ②遍歷至指定位置進行刪除操作
    程式碼實現:

    補充:其實完全可以不需要建立指標q,“q = p->next;p->next = q->next;”兩步可用“p->next = p->next->next”替代,效果相同。

  • 涉及到改變連結串列資料的操作時,應當使用引用傳遞
  • 對於連結串列的各種操作並非一成不變,應當根據實際情況靈活變換

相關文章