單鏈表的結點中只有乙個指示直接後繼的指標域,由此,從某個結點出發只能順指標往後尋查其他結點。若要尋查結點的直接前驅,則需從表頭指標出發。為克服單鏈表這種單向性的缺點,可利用雙向鍊錶。
在雙向鍊錶中的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅。
定義的輔助巨集:
#define ok 1
#define error 0
#define overflow -1
#define listincrement 10
#define list_init_size 30000
typedef int status;
typedef int elemtype;
雙向鍊錶的儲存結構定義:
typedef struct dulnodedulnode,*dulinklist;
初始化乙個雙鏈表.
status initlist_dul(dulinklist &l)
在帶頭結點的雙鏈迴圈線性表l中第i個位置之前插入元素e
status listinsert_dul(dulinklist &l,int i,elemtype e)
if(!p||i<1)
return error;
dulnode *s;
s=(dulnode *)malloc(sizeof(dulnode));
if(!s)
exit(overflow);
s->data=e;
s->prior=p;
if(!(p->next))
else
return ok;
}
刪除帶頭結點的雙鏈線性表l的第i個元素.
status listdelete_dul(dulinklist &l,int i,elemtype &e)
if(!p||i<1)
return error;
e=p->data;
if(p->next)
else
p->prior->next=null;
free(p);
p=null;
return ok;
}
資料結構 鍊錶 雙向鍊錶
注意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 ...