迴圈鍊錶
(circular linked list)
是一種首尾相接的單鏈表。
(1)單迴圈鍊錶
——在單鏈表中,將終端結點的指標域null改為指向表頭結點或開始結點即可。
(2)多重鏈的迴圈鍊錶
——將表中結點鏈在多個環上。
單迴圈煉表示意圖:
注意:迴圈鍊錶的操作和線性表基本一致,只是
判斷空鍊錶的條件是head==head->next;
用尾指標rear表示的單迴圈鍊錶對
開始結點a1
和終端結點an
查詢時間都是o(1)。
而表的操作常常是在表的首尾位置上進行,因此,實用中多採用尾指標表示單迴圈鍊錶。
帶尾指標的單迴圈鍊錶可見下圖:
注意:
判斷空鍊錶的條件為rear==rear->next;
迴圈鍊錶的特點是無須增加儲存量,僅對錶的鏈結方式稍作改變,即可使得表處理更加方便靈活。
【例】在鍊錶上實現將兩個線性表(a1,a
2,…,a
n)和(b1,b
2,…,b
m)連線成乙個線性表(a
1,…,an,b
1,…b
m)的運算。
分析:若在單鏈表或頭指標表示的單迴圈表上做這種鏈結操作,都需要遍歷第乙個鍊錶,找到結點a
n,然後將結點b
1鏈到a
n的後面,其執行時間是o(n)。若在尾指標表示的單迴圈鍊錶上實現,則只需修改指標,無須遍歷,其執行時間是o(1)。
兩個單迴圈鍊錶的鏈結操作示意圖
相應的演算法如下:
linklist connect( linklist a, linklist b )
注意: 資料結構 線性表鏈式儲存結構 迴圈鍊錶
巨集定義 define failed 1 define success 0 typedef struct cirslinknode cirslinknode typedef struct cirdlinknode cirdlinknode 帶頭結點的迴圈單鏈表,統計其data域值為x的結點個數 in...
線性表 鏈式儲存結構 雙向鍊錶
雙向鍊錶結點結構 既然單鏈表可以有迴圈鍊錶,那麼雙向鍊錶當然也可以有。由於這是雙向鍊錶,那麼對於鍊錶中的某乙個結點p,它的後繼結點的前驅結點是它本身。實現 s next p s prior p prior p prior next s p prior s 關鍵在於交換的過程中不要出現矛盾,例如第四步...
線性表鏈式儲存結構
include include 線性表鏈式儲存結構 typedef struct lnodelnode,linklist int initlist linklist l 初始化 int endinsert linklist l,int e p next s return 1 末尾插入元素 int g...