雙鏈表在一定程度上就是單鏈表的的基礎上加上了乙個指標域,在一些情況下能夠使程式更加健壯和速率更加高效。
雙鏈表的結點定義
typedef struct node
int data;
struct node *next;
struct node *prior;
}node;
雙鏈表的定義
typedef struct doublelist
node *head;
node *tail;
size_t size;
}doublelist;
鍊錶的初始化
doublelist *list;
list = (doublelist *)malloc(sizeof(doublelist));
list->head = null;
list->tail = null;
list->size = 0;
頭插:1.在每次插入新結點是進行一次該雙鏈表是否為空的判斷,若為空則頭結點為建立的新結點。
list->head = newnode;
list->tail = newnode;
2.若煉表不為空:
newnode->next = list->head;//當鍊表為空時插入頭結點時,頭結點等於尾結點
list->head->prior = newnode;
list->head = newnode;
尾插:在插入之前進行一次判斷
1.鍊錶為空煉表時:
list->tail = newnode;
list->head = newnode;
2.鍊錶不為空時:
newnode->prior = list->tail;
list->tail->next = newnode;
list->tail = newnode;
雙鏈表的遍歷
1.正向遍歷
node *tmp;
tmp = list->head;
while(tmp){
printf("%d\n",tmp->data);
tmp = tmp->next;
2.反向遍歷
node *tmp;
tmp = list->tail;
while(tmp){
printf("%d\n",tmp->data);
tmp = tmp->next;
具體的**實現:github中zou-ting-rong/sample
單鏈表與雙鏈表佇列
一,鍊錶分類 單鏈表與雙向鍊錶 三,定義類 1 node類 傳值與重寫get,set方法 2 linknodelist類 將對資料的增刪差改的基本操作方法或屬性 3 main 主函式類,進行資料的呼叫 四,單鏈表的示例 public class linklistnode else 設定新節點為最後乙...
單鏈表 雙鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...
單鏈表與有序雙鏈表的實現
單鏈表的實現 描述定義單鏈錶類,建立帶頭結點的單鏈表 節點型別為整型資料 要求包含以下成員函式 頭插法建立單鏈表 利用建構函式實現 尾插法建立單鏈表 過載建構函式實現 鍊錶的遍歷 按值刪除乙個節點 按位置刪除乙個節點 鍊錶的析構 輸入輸入一組資料,以尾插法的形式建立單鏈表 表示輸入結束 構造第乙個鍊...