|  | |
| 嵌入式linux內核數據結構之雙向鏈表 | |
| 嵌入式linux內核雙向鏈表的組織與存儲 在單向鏈表中(zhong),每個(ge)節(jie)(jie)點(dian)(dian)(dian)中(zhong)只包括一(yi)個(ge)指向下個(ge)節(jie)(jie)點(dian)(dian)(dian)的指針(zhen)域(yu),因此要(yao)在單(dan)向鏈表(biao)中(zhong)插(cha)入一(yi)個(ge)新節(jie)(jie)點(dian)(dian)(dian),就必須從鏈表(biao)頭(tou)指針(zhen)開(kai)始逐個(ge)遍歷鏈表(biao)中(zhong)的節(jie)(jie)點(dian)(dian)(dian)。雙向鏈表(biao)與單(dan)向鏈表(biao)不同(tong),它的每個(ge)節(jie)(jie)點(dian)(dian)(dian)中(zhong)包括兩個(ge)指針(zhen)域(yu),分別指向該節(jie)(jie)點(dian)(dian)(dian)的前一(yi)個(ge)節(jie)(jie)點(dian)(dian)(dian)和(he)后一(yi)個(ge)節(jie)(jie)點(dian)(dian)(dian),如圖1.1所示: 
  這樣,在雙向(xiang)鏈表中由(you)(you)任何一個節點(dian)都可以很(hen)容易地找到其(qi)前面(mian)的節點(dian)和后(hou)面(mian)的節點(dian),而不需要在上述的插入(ru)(及刪(shan)除(chu))操作中由(you)(you)頭節點(dian)開始尋(xun)找,定義雙向(xiang)鏈表的節點(dian)結(jie)構為:     struct link_node 嵌入式linux內核雙向鏈表的常見操作 (1)增加節點 在(zai)雙向鏈表中(zhong)增加一(yi)個(ge)節點(dian)要比在(zai)單(dan)鏈表中(zhong)的插入操作復雜地多,因(yin)為在(zai)此處節點(dian)next指(zhi)針和priv指(zhi)針會同時變化,如圖1.2所示: 
     由圖中可以看出,在雙向鏈表中增加一個節點會依次完成以下操作。 (2)刪除節(jie)點   雙(shuang)鏈(lian)(lian)表中(zhong)刪(shan)除節點(dian)與單鏈(lian)(lian)表類(lei)似,也是(shi)增加(jia)過(guo)程的反操作,如圖1.3所示 
     由圖中可以看出,在雙向鏈表中刪除元素指針會依次有以下變化。 熱點鏈接: |