雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。而之前的單鏈表為單向鍊錶,雙向鍊錶也就是在單鏈表的結點中增加乙個指向其前驅的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
資料結構 003雙向鍊錶
雙鏈表 include using namespace std typedef int elemtype typedef struct lnode lnode,linklist 初始化 linklist init linklist 頭插法建立鍊錶 linklist head insert linkl...
資料結構與演算法筆記(四 雙向鍊錶
前一篇 資料結構與演算法筆記 三 單鏈表 乙個完整的雙向鍊錶應該是頭結點的pre指標指為空,尾結點的next指標指向空,其餘結點前後相鏈。結點構成 建構函式 typedef struct lineline,a 分別表示該結點的前驅 pre 後繼 next 以及當前資料 data 建立 對於建立雙向鍊...
資料結構基礎 1 雙向鍊錶
linklist.h ifndef link list h define link list h 1 include include include struct stu struct stu initlist struct stu head void destroylist struct stu ...