雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。而之前的單鏈表爲單向鏈表,雙向鏈表也就是在單鏈表的結點中增加一個指向其前驅的pre指針。
如圖
這裏介紹雙向鏈表的常用操作:
l 創建雙向鏈表
l 銷燬雙向鏈表
l 清空雙向鏈表
l 獲取表長度
l 把node插入pos位置
l 獲取pos位置的元素
l 刪除pos位置的元素
l 刪除表中與node相同的元素(刪除第一個匹配成功的)
l 重置遊標
l 返回遊標所指向的結點
l 遊標後移
l 遊標前移
代碼總分爲三個文件:
DLinkList.h : 放置功能函數的聲明,以及表的聲明,表結點的定義
DLinkList.c : 放置功能函數的定義,以及表的定義
Main.c : 主函數,使用功能函數完成各種需求,一般用作測試
整體結構圖爲:
這裏詳細說下插入操作和刪除操作:
插入操作:
如圖
插入元素方法:
判斷表和插入位置是否合法
由表頭開始通過next域移動pos次後,當前元素的next域爲要插入的位置
Current的next域指向node
Node的next域指向next
判斷是否爲尾插,如果不是的話next的pre域指向node
判斷是否爲頭插,如果是的話node的pre域指向NULL
如果之前表爲空表,則遊標指向插入的結點
表長度加1
刪除操作:
如圖
刪除元素方法:
判斷表和插入位置是否合法
由表頭開始通過next域移動pos次後,當前元素的next指向的元素爲要刪除的元素
把current的next域指向next
判斷是否爲尾插,如果不是的話,next的pre指針指向current
如果不是尾插且是頭插的話,next的pre指針指向NULL
如果刪除的結點正好遊標也指向它,則遊標後移
表長度減1