資料結構 帶頭結點的雙向迴圈鍊錶操作 C實現

2021-10-08 19:29:05 字數 2610 閱讀 6926

//定義結點結構

typedef

struct dcnode

dcnode,

*dclinklist;

//鍊錶初始化

void

initdclinklist

(dclinklist plist)

plist->prior = plist ->next = plist;

}

為了實現以下插入,刪除等一系列操作,先封裝以下功能:

int

getlength

(dclinklist plist)

int length =0;

dclinklist p = plist->next;

while

(p != plist)

return length;

}

dclinklist findnode

(dclinklist plist,

int pos)

if(pos <0)

dclinklist p =plist;

while

(pos && p ->next != plist)

if(pos ==0)

return

null

;}

(

int val,dclinklist prior,dclinklist next)

s->data = val;

s->prior = prior;

s->next = next;

return s;

}

void

insert

(dclinklist plist,

int val,

int pos)

dclinklist p =

findnode

(plist,pos);if

(p ==

null

)//完成插入結點的銜接

dclinklist t =

(val ,p, p->next);if

(t ==

null

)//pos位置下乙個節點的prior和pos位置的next

p->next->prior = t;

p->next = t;

}

void

insert_head

(dclinklist plist,

int val)

void

insert_tail

(dclinklist plist,

int val)

dclinklist t =

(val ,plist->prior, plist);if

(t ==

null

) plist->prior->next = t;

plist->prior= t;

}

void

delete

(dclinklist plist,

int pos)

dclinklist p =

findnode

(plist,pos);if

(p == plist || p ==

null

) p->prior->next=p->next;

p->next->prior = p->prior;

free

(p);

}

void

delete_head

(dclinklist plist)

void

delete_tail

(dclinklist plist)if(

listempty

(plist)

)//鍊錶為空不需要刪除

dclinklist p = plist->prior;

p->prior->next=p->next;

p->next->prior = p->prior;

free

(p);

}

int

listempty

(dclinklist plist)

return0;

}

void

clear

(dclinklist plist)

while(!

listempty

(plist)

)}

void

show

(dclinklist plist)

dclinklist p = plist ->next;

while

(p != plist)

printf

("null\n");

}

資料結構 雙向迴圈帶頭結點鍊錶

前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...

資料結構C 描述 帶頭結點的雙向迴圈鍊錶

執行展示 鍊錶是線性表的一種實現形式,它的核心是指標,主要特點是增加與刪除不需要移動大量元素,查詢某一特定元素較慢,邏輯上相鄰的元素物理上不一定相鄰。鍊錶主要分為單鏈表,雙向鍊錶與迴圈鍊錶。每種鍊錶又可分為帶頭結點的和不帶頭結點的。本篇主要介紹帶頭結點的雙向迴圈鍊錶的基本操作。雙向迴圈鍊錶的每個結點...

資料結構 帶頭雙向迴圈鍊錶的實現

在實際工作中用雙向鍊錶又更多一點,因為雙向鍊錶比單鏈表效率更高,雙鏈表結構複雜,但是使用 實現以後會發現結構會帶來 很多優勢,實現反而簡單了 其實寫了單鏈表之後再看雙鏈表其實非常簡單,只不過就是多了乙個指標域而已,再沒有什麼特別難的地方.我們就直接上 吧 dlist.h pragma once in...