之前學習了單鏈表的相關操作,但是單鏈表有乙個缺點,無法快速訪問前驅結點,當查詢到某個元素時,如果想要找到前面元素的結點,需要再次從頭遍歷,這樣就比較麻煩,那麼是否可以在節點中再增加乙個指標指向前驅結點,答案是可以的。增加了指向前驅結點的指標的鍊錶稱為雙鏈表
鍊錶分類
鍊錶還有一種常用,那就是迴圈鍊錶,顧名思義,這種鍊錶就是頭尾相連
//雙向
//迴圈
//有頭
#pragma once
//定義結點
typedef struct dlistnode dlistnode;
void dlistinit(dlistnode** pphead); //鍊錶初始化
void dlistclear(dlistnode* phead); //清空鍊錶(保留頭結點)
void dlistdestroy(dlistnode* phead); //清空鍊錶(不保留頭結點)
void dlistinsert(dlistnode* phead, dlistnode* pos, int data); //再結點pos的位置插入元素data
void dlistpushfront(dlistnode* phead, int data); //頭插
void dlistpushback(dlistnode* phead,int data); //尾插
void dlistearse(dlistnode* phead, dlistnode* pos); //刪除結點pos
void dlistpopfront(dlistnode* phead); //頭刪
void dlistpopback(dlistnode* phead); //尾刪
#include "dlist.h"
#include #include #include void dlistinit(dlistnode** pphead)
// 清空,保留根節點
void dlistclear(dlistnode* phead)
}//清空,不保留根節點
void dlistdestroy(dlistnode* phead)
void dlistinsert(dlistnode* phead, dlistnode* pos, int data)
void dlistpushfront(dlistnode* phead,int data)
void dlistpushback(dlistnode* phead, int data)
void dlistearse(dlistnode* phead, dlistnode* pos)
void dlistpopfront(dlistnode* phead)
void dlistpopback(dlistnode* phead)
雙鏈表操作
處理完了單鏈表,這次處理雙鏈表。在乙個雙鏈表中,每個節點都包含兩個指標,指向前乙個節點的指標和指向後乙個節點的指標。這可以使我們以任何方式遍歷雙鏈表,甚至可以忽略前後地在雙鏈表中訪問。下面的圖示展示了乙個雙鏈表 下面是節點型別的宣告檔案 double linked list node.h ifnde...
雙鏈表基本操作
1.在頭接點插入指定的值 template void insertd dnode front,const t value 2.顯示所有接點數值 template void showd dnode front 3.刪除接點 template void deleted dnode lhs 4。刪除指定資...
雙鏈表基本操作
看歐立奇的 程式設計師面試寶典 的雙向鍊錶部分,發現其中建立雙向鍊錶和刪除鍊錶中得某一點的程式存在問題,現將已經除錯通過的程式貼在下面 include using namespace std define len sizeof dnode typedef struct doublenode dnod...