2019年1月26日 星期六

鏈結串列實戰 (LIST_ENTRY)

我的下一個範例非常的巨大也非常的難, 如果用array做就會比較簡單但我堅持用鏈結串列否則我學不到東西, 最後也真的被我做出來不過為了怕下一篇寫得太長就先介紹鏈結串列, 其實台灣的難和老美的難完全是不同等級的難, 台灣工程師常把技術無法提升推給英文或是國家科學基礎, 但真正能以C語言為基礎把中斷驅動作業系統或是事件驅動作業系統的核心程式精通的工程師卻也不多, 我們不能把NT32歸類為崁入式系統因為它沒有硬體完全是虛擬平台, 但NT32是一套作業系統卻是毫無疑問的(它有排程有記憶體管理當然是作業系統), 當然NT32也是英特爾精銳嘔心泣血之作, 雖然我對NT32平台還是了解的很少但我想這也並不丟臉, 閒話說完了先看鏈結串列的原型如下圖:
由上圖可知鏈結串列是兩個指向跟自己同型態的"指標", 這非常重要, 因為要判斷鏈結串列的元素是否和頭元素相等時常會有"&"運算子的誤用, 下圖是幾乎每次宣告鏈結串列時都必須呼叫的函式, 沒啥學問就把前後兩元素指向自己, 看看就好

再來是我自己寫的兩個函式, 第一個函式是插入第一個元素時使用, 第二個函式是插入第N個使用, 先看插入第一個元素的函式:

經過這個函式處理, Head與Note會像這樣:
再來是插入第N個元素的函式如下:



然後插入完會像這樣:





沒有留言:

張貼留言