雙向迴圈鍊錶

2022-09-11 22:21:25 字數 2749 閱讀 4130

雙向迴圈鍊錶可理解為乙個閉環,一般為了區別和操作方便,頭結點不存內容。以下是整個過程的**實現

1 #include 2 typedef int datatype;//

定義int的別名,以防止以後結點內容不是int了可以方便替換3//

定義鍊錶結點結構體

4struct

node5;

10 typedef struct node node;//

定義別名,方便書寫

1112 node * createdlist();//

建立雙向迴圈鍊錶

13int insertlist1(node *head, datatype data);//

頭插法插入

14int insertlist2(node *head, datatype data);//

尾插法插入

15void printdlist(node * head);//

列印鍊錶內容

16 node *searchnode(node *head, datatype find);//

查詢鍊錶中的元素,雙向查詢

17void sortlist1(node *head, int len);//

交換內容排序 基於冒泡

18void sortlist2(node *head, int len);//

交換指標排序 基於冒泡

19void sortlist3(node *head, int len);//

基於選擇排序的交換內容排序

20int deletenode(node *head, datatype data);//

刪除指定節點

21int lenlist(node *head);//

求雙向迴圈鍊錶的長度

22void destroylist(node *head);//

求雙向迴圈鍊錶的長度

2324

int main(void)25

53//

建立雙向迴圈鍊錶,只需要返回乙個頭結點就好

54//

雙向迴圈鍊錶,就想乙個閉環一樣的概念,一般頭結點中不儲存內容

55 node *createdlist()

5664

else

65return

null;66}

67//

頭插法插入,每次插入在頭結點後緊跟著

68int insertlist1(node *head, datatype data)

6983

else

84return -1;85

}86//尾插法插入,每次插入在頭結點之前

87int insertlist2(node *head, datatype data)

8899

return -1

;100

}101

//列印鍊錶內容

102void printdlist(node *head)

103110

}111

//查詢鍊錶中的元素,雙向查詢

112 node *searchnode(node *head, datatype find)

113 while (left != right && left->left!=right);//

當兩個結點相遇或者錯過時候終止迴圈

125//

如果除了頭結點是偶數個,則相互錯過時候終止

126//

如果除了頭結點是奇數個,則相遇時候終止查詢

127return

null;

128}

129//

交換內容排序 基於冒泡

130void sortlist1(node *head, int

len)

131145 p = p->right;

146 q = q->right;

147}

148}

149150

}151

//交換指標排序 基於冒泡

152void sortlist2(node *head, int

len)

153173

else

177178

}179

}180

}181

//基於選擇排序的交換內容排序

182void sortlist3(node *head, int

len)

183203

if (max !=p)

204209 p = p->right;

210}

211}

212//

基於選擇排序的交換指標排序,寫了但是一直出問題?

213//

刪除指定節點

214int deletenode(node *head, datatype data)

215223

return0;

224}

225//

求雙向迴圈鍊錶的長度

226int lenlist(node *head)

227234

return

len;

235}

236//

銷毀所有記錄

237void destroylist(node *head)

238245

free

(head);

246247 }

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

鍊錶 雙向迴圈鍊錶

雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...