資料結構筆記 雙鏈表

2021-10-22 12:00:34 字數 1379 閱讀 8870

單鏈表從某個結點出發只能順指標向後尋查其他的結點。若要尋查結點的直接前驅,則必須從表頭指標出發。位克服單鏈表的單向性的缺點,可利用雙鏈表。

雙鏈表的模型:

typedef struct nodenode,*linklist;
雙鏈表也可以有迴圈表

bool initlinklist(linklist &l)

l->prior=null; //頭結點的p永遠指向null

l->next=null; //頭結點之後暫時沒有節點

return true;

}

void testlinklist()
判斷雙鏈表是否為空(帶頭結點)

bool empty(linklist l)
在p結點之後插入s結點

bool insertnextnode(node *p,node *s)
前插操作可以看作是前驅節點的後插

例如:在a2前面插入節點可以轉換成a1的後插操作

刪除結點不是尾結點:

刪除p的後繼結點q

p->next=q->next;

q->next->prior=p;

free(p);

改進做法:判斷刪除節點是否為尾結點

//刪除p結點的後繼結點

bool deletenextnode(node *p)
void destorylist(linklist &l)
while(p!=null)
while(p!=null)
雙鏈表不可隨機訪問,按位查詢、按值查詢操作都只能用遍歷的方式實現。

時間複雜度o(n)。

資料結構 雙鏈表

typedef struct nodenode 雙鏈表的根節點的bwd指標指向雙鏈表的最後乙個節點,fwd指標指向雙鏈表的第乙個節點,雙鏈表的value欄位為空 以下程式是將乙個值插入到乙個有序的雙鏈表中,如果鍊錶中已經有和該值相同的節點則不插入 include include typedef st...

資料結構 雙鏈表

目標 掌握雙鏈表的資料結構 來看看什麼是雙鏈表吧 雙鏈表與單鏈表的區別,單鏈表是單項的 而雙鏈表是有左右的 題目acwing 827 實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k...

資料結構 雙鏈表

單鏈表結點中只有乙個只指向後繼的指標,使得單鏈表只能從頭結點開始一次順序的先後遍歷。要訪問某個結點的前驅結點 插入刪除操作時 只能從頭開始遍歷,訪問後繼節點的時間複雜度為o 1 訪問前驅結點的時間複雜度為o n 為了克服單鏈表的上述缺點,引入了雙鏈表,雙鏈表結點中有兩個指標prior 和 next,...