資料結構之單連結串列的建立與刪除

Galois發表於2020-10-09

對於每個連結串列來說,它所佔用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際的需求即時生成。
建立單連結串列的過程就是一個動態生成連結串列的過程。即從“空表”的初始狀態起,依次建立各元素結點,並逐個插入連結串列。
單連結串列整表建立的演算法思路:

  1. 宣告一指標 p 和計數器變數 i;
  2. 初始化一空連結串列 L;
  3. 讓 L 的頭結點的指標指向 NULL,即建立一個帶頭結點的單連結串列;
  4. 迴圈:
    • 生成一新結點賦值給 p;
    • 隨機生成一數字賦值給 p 的資料域 p->data;
    • 將 p 插入到頭結點與前一新結點之間。

頭插法

先讓新結點的 next 指向頭結點之後,然後讓表頭的那個指向新節點。

xpHzPtnjhT.png!large

頭插法建立連結串列雖然演算法非常簡單,但生成的連結串列中結點的次序和輸入的順序是相反的。這也是頭插法不好的一個方面。
我們為什麼不把新結點都放到最後呢,這才是排隊時的正常思維,所謂的先來厚道。我們把每次新結點都插在終端結點的後面,這種演算法稱之為「尾插法」。

尾插法

r->next = p;
r = p;

kfXOOoRcFY.png!large 將剛才的表尾終結點 r 的指標指向新結點 p。 dUcwKJqDeH.png!large 本來 r 是在 ai-1 元素的結點,可現在它已經不是最後的結點了,現在最後的結點是 ai,所以應該要讓將 p 結點這個最後的結點賦值給 r。此時 r 又是最終的尾結點了。

單連結串列的整表刪除

當不打算使用這個單連結串列時,需要把它銷燬,其實也就是在記憶體中將它釋放掉,以便於留出空間給其他程式或軟體使用。

單連結串列整表刪除的演算法思路:

  1. 宣告指標 p 和 q;
  2. 將第一個結點賦值給 p;
  3. 迴圈:
    • 將下一結點賦值給 q;
    • 釋放 p;
    • 將 q 賦值給 p;
本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章