資料結構 雙向鍊錶

2021-09-12 15:40:12 字數 1704 閱讀 9858

---------------start reading---------------

雙向鍊錶是鍊錶的一種,都是以鏈式結構儲存。與單鏈表不同的是,雙向鍊錶可以向前找前驅,而單鏈表只能自己定義前驅而且不能倒退。雙向鍊錶有與單鏈表不同的結構,但實現的功能基本是一樣的。

雙向鍊錶的結構

雙向鍊錶的操作一定要注意,要改前驅位址。特別注意尾結點,當需要改後繼的前驅的時候,尾結點不能用p->prio->next=p->next->prio,p->next為null解引用會導致程式崩潰

雙向鍊錶的具體操作

標頭檔案

#pragma once

//帶頭節點雙向鍊錶,非迴圈

typedef struct dnode

dnode,*dlist;

//鍊錶初始化

void initlist(dlist plist);//node

//頭插

bool insert_head(dlist plist,int val);

//尾插

bool insert_tail(dlist plist,int val);

//查詢

dnode *search(dlist plist,int key);

//刪除

bool delete(dlist plist,int key);

int getlength(dlist plist);

bool isempty(dlist plist);

void clear(dlist plist);

void destroy(dlist plist);

void show(dlist plist);

具體實現

#include #include #include #include "dlist.h"

//鍊錶初始化

void initlist(dlist plist)

plist->next = null;

plist->prio = null;

}//頭插

bool insert_head(dlist plist,int val)

return true;

}//尾插

bool insert_tail(dlist plist,int val)

//查詢

dnode *search(dlist plist,int key)

} return null;

}//刪除

bool delete(dlist plist,int key)

p->prio->next = p->next;

if(p->next != null)

free(p);

return true;

}int getlength(dlist plist)

return count;

}bool isempty(dlist plist)

void clear(dlist plist)

void destroy(dlist plist)

}void show(dlist plist)

printf("\n");

}

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...

資料結構 雙向鍊錶

前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...

資料結構 雙向鍊錶

單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...