![]() |
|
嵌入式linux內(nèi)核數(shù)據(jù)結(jié)構(gòu)之雙向鏈表 |
|
嵌入式linux內(nèi)核雙向鏈表的組織與存儲 在單向鏈表中,每個節(jié)點中只包括一個指向下個節(jié)點的指針域,因此要在單向鏈表中插入一個新節(jié)點,就必須從鏈表頭指針開始逐個遍歷鏈表中的節(jié)點。雙向鏈表與單向鏈表不同,它的每個節(jié)點中包括兩個指針域,分別指向該節(jié)點的前一個節(jié)點和后一個節(jié)點,如圖1.1所示:
這樣,在雙向鏈表中由任何一個節(jié)點都可以很容易地找到其前面的節(jié)點和后面的節(jié)點,而不需要在上述的插入(及刪除)操作中由頭節(jié)點開始尋找,定義雙向鏈表的節(jié)點結(jié)構(gòu)為: struct link_node 嵌入式linux內(nèi)核雙向鏈表的常見操作 (1)增加節(jié)點 在雙向鏈表中增加一個節(jié)點要比在單鏈表中的插入操作復(fù)雜地多,因為在此處節(jié)點next指針和priv指針會同時變化,如圖1.2所示:
由圖中可以看出,在雙向鏈表中增加一個節(jié)點會依次完成以下操作。 (2)刪除節(jié)點 雙鏈表中刪除節(jié)點與單鏈表類似,也是增加過程的反操作,如圖1.3所示
由圖中可以看出,在雙向鏈表中刪除元素指針會依次有以下變化。 熱點鏈接:
1、Linux內(nèi)核模塊程序結(jié)構(gòu) |