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