雙鏈表操作詳解

2021-09-19 15:23:10 字數 1584 閱讀 8074

之前學習了單鏈表的相關操作,但是單鏈表有乙個缺點,無法快速訪問前驅結點,當查詢到某個元素時,如果想要找到前面元素的結點,需要再次從頭遍歷,這樣就比較麻煩,那麼是否可以在節點中再增加乙個指標指向前驅結點,答案是可以的。增加了指向前驅結點的指標的鍊錶稱為雙鏈表

鍊錶分類

鍊錶還有一種常用,那就是迴圈鍊錶,顧名思義,這種鍊錶就是頭尾相連 

//雙向

//迴圈

//有頭

#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...