鍊錶的C語言實現(五)

2021-06-28 09:21:05 字數 682 閱讀 8782

一、迴圈鍊錶

迴圈鍊錶是與單鏈表一樣,是一種鏈式的儲存結構,所不同的是,迴圈鍊錶的最後乙個結點的指標是指向該迴圈鍊錶的第乙個結點或者表頭結點,從而構成乙個環形的鏈。

迴圈鍊錶的運算與單鏈表的運算基本一致。所不同的有以下幾點:

1、在建立乙個迴圈鍊錶時,必須使其最後乙個結點的指標指向表頭結點,而不是象單鏈表那樣置為null。此種情況還使用於在最後乙個結點後插入乙個新的結點。

2、在判斷是否到表尾時,是判斷該結點鏈域的值是否是表頭結點,當鏈域值等於表頭指標時,說明已到表尾。而非象單鏈表那樣判斷鏈域值是否為null。

二、雙向鍊錶

雙向鍊錶其實是單鏈表的改進。

當我們對單鏈表進行操作時,有時你要對某個結點的直接前驅進行操作時,又必須從表頭開始查詢。這是由單鏈表結點的結構所限制的。因為單鏈表每個結點只有乙個儲存直接後繼結點位址的鏈域,那麼能不能定義乙個既有儲存直接後繼結點位址的鏈域,又有儲存直接前驅結點位址的鏈域的這樣乙個雙鏈域結點結構呢?這就是雙向鍊錶。

在雙向鍊錶中,結點除含有資料域外,還有兩個鏈域,乙個儲存直接後繼結點位址,一般稱之為右鏈域;乙個儲存直接前驅結點位址,一般稱之為左鏈域。在c語言中雙向鍊錶結點型別可以定義為:

typedef struct node

jd;當然,也可以把乙個雙向鍊錶構建成乙個雙向迴圈鍊錶。

雙向鍊錶與單向鍊錶一樣,也有三種基本運算:查詢、插入和刪除。

鍊錶的C語言實現(五)

3 刪除 假如我們已經知道了要刪除的結點p的位置,那麼要刪除p結點時只要令p結點的前驅結點的鏈域由儲存p結點的位址該為儲存p的後繼結點的位址,並 p結點即可。以下便是應用刪除演算法的例項 include include include define n 10 typedef struct node ...

鍊錶的C語言實現

編輯 c巨集例項 以下 摘自linux核心2.6.21.5原始碼 部分 展示了鍊錶的另一種實現思路,未採用ansi c標準,採用gnu c標準,遵從gpl版權許可。struct list head define list head init name define list head name st...

雙向鍊錶C語言實現

ifndef stdlist h define stdlist h typedef struct tagstdnode stdnode,lpstdnode typedef struct tagstdlist stdlist,lpstdlist 鍊錶資料結構 struct tagstdnode 鍊錶節...