對於每個連結串列來說,它所佔用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際的需求即時生成。
建立單連結串列的過程就是一個動態生成連結串列的過程。即從“空表”的初始狀態起,依次建立各元素結點,並逐個插入連結串列。
單連結串列整表建立的演算法思路:
- 宣告一指標 p 和計數器變數 i;
- 初始化一空連結串列 L;
- 讓 L 的頭結點的指標指向 NULL,即建立一個帶頭結點的單連結串列;
- 迴圈:
- 生成一新結點賦值給 p;
- 隨機生成一數字賦值給 p 的資料域 p->data;
- 將 p 插入到頭結點與前一新結點之間。
頭插法
先讓新結點的 next 指向頭結點之後,然後讓表頭的那個指向新節點。
頭插法建立連結串列雖然演算法非常簡單,但生成的連結串列中結點的次序和輸入的順序是相反的。這也是頭插法不好的一個方面。
我們為什麼不把新結點都放到最後呢,這才是排隊時的正常思維,所謂的先來厚道。我們把每次新結點都插在終端結點的後面,這種演算法稱之為「尾插法」。
尾插法
r->next = p;
r = p;
將剛才的表尾終結點 r 的指標指向新結點 p。 本來 r 是在 ai-1 元素的結點,可現在它已經不是最後的結點了,現在最後的結點是 ai,所以應該要讓將 p 結點這個最後的結點賦值給 r。此時 r 又是最終的尾結點了。
單連結串列的整表刪除
當不打算使用這個單連結串列時,需要把它銷燬,其實也就是在記憶體中將它釋放掉,以便於留出空間給其他程式或軟體使用。
單連結串列整表刪除的演算法思路:
- 宣告指標 p 和 q;
- 將第一個結點賦值給 p;
- 迴圈:
- 將下一結點賦值給 q;
- 釋放 p;
- 將 q 賦值給 p;
本作品採用《CC 協議》,轉載必須註明作者和本文連結