數據結構四雙向鏈表

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。而之前的單鏈表爲單向鏈表,雙向鏈表也就是在單鏈表的結點中增加一個指向其前驅的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