這幾天做了筆試題發現雙向鍊錶這一塊自己掌握的很差,所以寫下此部落格來加深自己對雙向鍊錶的理解
首先什麼是雙向鍊錶?
通過翻閱資料知道雙向鍊錶是指在前驅和後繼方向都能遍歷的線性表
自己在軟體上寫了幾遍,**如下
1、雙向鍊錶的定義
typedef int elemtype;
typedef struct nodedblnode;
typedef dblnode *dbllist;
2、建立空的雙向鍊錶
void createdbllist(dbllist *first) //建立雙向鍊錶
(*first)->left = (*first)->right = (*first); //初始化 表頭結點的指標都指向自己
}
3、查詢第 i 個結點的位置
dblnode* locate(dbllist first, int i) //查詢第 i 個結點在鏈中的位置
return p;
}
4、雙向鍊錶插入結點
void insertlist(dbllist first,int i, elemtype data) //雙向鍊錶插入結點
5、雙向鍊錶刪除結點
void remove(dbllist first, int i) //雙向鍊錶刪除結點
雙向鍊錶相對單鏈表稍微複雜些,但我還是慢慢掌握了,繼續加油!
雙向鍊錶實現 插入刪除
include stdafx.h include stdio.h include stdlib.h 雙向鍊錶 結點 typedef struct nodenode 鍊錶管理 節點 typedef struct linklink 鍊錶的初始化 void inital link link 鍊錶的插入 v...
雙向迴圈鍊錶的插入和刪除
a 為刪除,b 為插入 雙向迴圈鍊錶實則為乙個環狀,因此插入 刪除 對任一位置的節點都適用 如下 define ok 1 define error 0typedef intstatus typedef struct dulnode dulinkedlist dulinkedlist getelemp...
雙向鍊錶插入 刪除操作
雙向鍊錶 迴圈單鏈表的出現,雖然能夠實現從任一結點出發沿著鏈能找到其前驅結點,但時間耗費是o n 如果希望從表中快速確定某乙個結點的前驅,另乙個解決方法就是在單鏈表的每個結點裡再增加乙個指向其前驅的指標域prior。這樣形成的鍊錶中就有兩條方向不同的鏈,我們可稱之為雙 向 鍊錶 doublelink...