資料結構 雙向鍊錶

2021-08-28 16:14:56 字數 1168 閱讀 8773

單鏈表的結點中只有乙個指示直接後繼的指標域,由此,從某個結點出發只能順指標往後尋查其他結點。若要尋查結點的直接前驅,則需從表頭指標出發。為克服單鏈表這種單向性的缺點,可利用雙向鍊錶。

在雙向鍊錶中的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅。

定義的輔助巨集:

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