上篇我們講了運用頭插法和尾插法建立單鏈表的方法,和兩種方法的比較。 接著我們學習迴圈鍊錶的建立。
只要學會了單鏈表的建立,迴圈鍊錶的建立就變得很簡單。
迴圈鍊錶建立
單鏈表的結構:
迴圈鍊錶:
所謂迴圈鍊錶,就是將單鏈表的尾結點end的指標域 也就是end->next指向頭結點的位址 : end->next = head 。 這樣就完成了迴圈鍊錶的建立。
這就完了? 當然沒有那麼簡單了~~~
迴圈鍊錶不同於單鏈表,原因在於上篇我們講單鏈表的時候,尾結點指標域的指向永遠是null,也就是end->next = null。 因此判斷單鏈表結束的標誌,就是while( node->next != null),但是迴圈鍊錶的尾結點指向的不是null,而是 頭結點head。因此,我們判斷的標準也要改變。
思考過後,決定將頭結點的資料域賦值為 -1,這樣就有了乙個標誌,用來判斷是否將迴圈鍊錶執行完一次。
思而不學則殆,即刻上手!
linklist creat_list(linklist head)
end->next = head; // 將尾結點的指標指向頭結點
return head;
}
這就完成了迴圈鍊錶的建立,接下來我們要想辦法讓迴圈鍊錶按照我們預想來執行迴圈的次數。
思前想後,想出了這個函式來判斷乙個迴圈鍊錶內的結點數。
int node_number(linklist *head)
return count + 1; // 因為第一次執行迴圈之前,跳過了頭結點,因此得到的count 沒有算頭結點,返回的時候我們加上1
}
這樣我們便得到了迴圈鍊錶的結點個數。
只要有了結點個數,我們就可以根據我們的需求來執行輸出迴圈鍊錶所有結點的次數。
void illustrate(linklist head)
}
這樣我們就完成了迴圈鍊錶的建立以及控制輸出。 關於可控大小的雙向迴圈鍊錶
本人現從事linux嵌入式軟體開發工作,入職剛剛1年,是個菜鳥。最近在工作中遇到了這樣乙個問題 乙個伺服器程式接收來自客戶端的gps資料報,伺服器解析資料報後,將資料儲存到鍊錶中,供給其他介面使用。我在這裡使用的鍊錶為linux核心中使用的鍊錶,即list.h。大家知道,這個鍊錶非常好用,而且基本上...
雙向迴圈鍊錶的建立及操作
專案名稱 雙向迴圈鍊錶的建立與基本操作 編譯環境 vc 2008 作者相關 最後修改 2019.6.19 學習目標 判空 求長 獲取元素位置 返回某個位置的元素 插入元素 刪除元素 清空鍊錶 銷毀鍊錶 注意事項 1.測試所有功能是否正常 include include define ok 1 def...
迴圈鍊錶的建立
迴圈鍊錶的建立以及基本操作 上篇我們講了運用頭插法和尾插法建立單鏈表的方法,和兩種方法的比較。接著我們學習迴圈鍊錶的建立。只要學會了單鏈表的建立,迴圈鍊錶的建立就變得很簡單。迴圈鍊錶建立 單鏈表的結構 迴圈鍊錶 所謂迴圈鍊錶,就是將單鏈表的尾結點 end 的指標域 也就是 end next 指向頭結...