//初始化
listnode*
listinit()
;//clear鍊錶
void
listclear
(listnode* phead)
;//摧毀鍊錶
void
listdestroy
(listnode*
* pphead)
;//動態申請乙個節點 並返回指標
listnode*
buylistnode
(ltdatatype x)
;//列印
void
listprint
(listnode* phead)
;//尾插
void
listpushback
(listnode* phead, ltdatatype x)
;//尾刪
void
listpopback
(listnode* phead)
;//頭插
void
listpushfront
(listnode* phead, ltdatatype x)
;//頭刪
void
listpopfront
(listnode* phead)
;//查詢x 返回 節點的指標
listnode*
listfind
(listnode* phead, ltdatatype x)
;//在pos前插入x
void
listinsert
(listnode* pos, ltdatatype x)
;//刪除
void
listerase
(listnode* pos)
;list.c
#include
"list.h"
//動態申請乙個節點
listnode*
buylistnode
(ltdatatype x)
//初始化
//listinit(listnode** pphead)
// listnode*
listinit()
//銷毀鍊錶 頭結點置空
void
listdestroy
(listnode*
* pphead)
//clear鍊錶:清理所有的資料節點,保留頭結點,可以繼續使用
void
listclear
(listnode* phead)
phead->next = phead;
//保證自己處於迴圈狀態
phead->prev = phead;
}//列印
void
listprint
(listnode* phead)
printf
("\n");
}//尾插
void
listpushback
(listnode* phead, ltdatatype x)
//尾刪
void
listpopback
(listnode* phead, ltdatatype x)
//頭插
void
listpushfront
(listnode* phead, ltdatatype x)
//頭刪
void
listpopfront
(listnode* phead)
//查詢x 返回 節點的指標
listnode*
listfind
(listnode* phead, ltdatatype x)
return
null;}
//在pos前插入x
void
listinsert
(listnode* pos, ltdatatype x)
//刪除
void
listerase
(listnode* pos)
鍊錶和順序表(陣列)的區別和聯絡(即優缺點)呢麼缺陷就是由鍊錶來解決了順序表和煉表算是互補的一對資料結構 資料結構 帶頭雙向迴圈鍊錶的實現
在實際工作中用雙向鍊錶又更多一點,因為雙向鍊錶比單鏈表效率更高,雙鏈表結構複雜,但是使用 實現以後會發現結構會帶來 很多優勢,實現反而簡單了 其實寫了單鏈表之後再看雙鏈表其實非常簡單,只不過就是多了乙個指標域而已,再沒有什麼特別難的地方.我們就直接上 吧 dlist.h pragma once in...
資料結構 棧的雙向帶頭迴圈鍊錶實現
使用雙向帶頭迴圈鍊錶來表示棧,表頭和表尾均可表示為棧頂,這裡以表頭為棧頂為例。進行入棧操作 頭插 進行出棧操作 頭刪 include include typedef int stdatatype typedef struct lstknode listnode typedef struct stac...
資料結構 雙向迴圈帶頭結點鍊錶
前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...