鍊錶帶頭結點和不帶頭結點的區別?
完成單鏈表的以下基本操作
完整**
鍊錶的結構非常多樣,以下情況組合起來就有8種鍊錶結構
單向、雙向
帶頭、不帶頭
迴圈、非迴圈
// 鍊錶的節點
typedef
struct slistnode
node,
*pnode;
// 鍊錶的結構,給乙個頭指標儲存鍊錶第乙個節點的位址
typedef
struct slist
slist,
*pslist;
// 鍊錶的初始化
void
slistinit
(slist* s)
;// 在鍊錶s最後乙個節點後插入值為data的節點
void
slistpushback
(slist* s, sdatatype data)
;// 刪除鍊錶s最後乙個節點
void
slistpopback
(slist* s)
;// 在鍊錶s第乙個節點前插入值為data的節點
void
slistpushfront
(slist* s, sdatatype data)
;// 刪除鍊錶s的第乙個節點
void
slistpopfront
(slist* s)
;// 在鍊錶的pos位置後插入值為data的節點
void
slistinsert
(pnode pos, sdatatype data)
;// 刪除鍊錶s中pos位置的節點
void
slisterase
(slist* s, pnode pos)
;// 在鍊錶中查詢值為data的節點,找到返回該節點的位址,否則返回null
pnode slistfind
(slist* s, sdatatype data)
;// 獲取鍊錶中有效節點的個數
size_t slistsize
(slist* s)
;// 檢測鍊錶是否為空
intslistempty
(slist* s)
;// 將鍊錶中有效節點清空
void
slistclear
(slist* s)
;// 銷毀鍊錶
void
slistdestroy
(slist* s)
;
#include
#include
#include
#include
"slist.h"
// 鍊錶的初始化
void
slistinit
(slist* s)
pnode buyslistnode
(sdatatype data)
pnewnode->_data = data;
pnewnode->_pnext =
null
;return pnewnode;
}// 在鍊錶s最後乙個節點後插入值為data的節點
//思路:1 找鍊錶中最後乙個節點;2 新建乙個節點;3 讓最後乙個節點指向新節點
void
slistpushback
(slist* s, sdatatype data)
else
pcur->_pnext = pnewnode;}}
// 刪除鍊錶s最後乙個節點
void
slistpopback
(slist* s)
else
if(s->_phead->_pnext ==
null
)else
free
(pcur)
; ppre->_pnext =
null;}
}// 在鍊錶s第乙個節點前插入值為data的節點
void
slistpushfront
(slist* s, sdatatype data)
// 刪除鍊錶s的第乙個節點
void
slistpopfront
(slist* s)
pnode pdelnode = s->_phead;
s->_phead = pdelnode->_pnext;
free
(pdelnode);}
// 在鍊錶的pos位置後插入值為data的節點
// 沒有提供s->_phead,故只能往後插
void
slistinsert
(pnode pos, sdatatype data)
pnode pnewnode =
buyslistnode
(data)
; pnewnode->_pnext = pos->_pnext;
pos->_pnext = pnewnode;
}// 刪除鍊錶s中pos位置的節點
void
slisterase
(slist* s, pnode pos)
if(pos = s->_phead)
else
if(pprepos)
}free
(pos);}
// 在鍊錶中查詢值為data的節點,找到返回該節點的位址,否則返回null
pnode slistfind
(slist* s, sdatatype data)
pcur = pcur->_pnext;
}return
null;}
// 獲取鍊錶中有效節點的個數
size_t slistsize
(slist* s)
return count;
}// 檢測鍊錶是否為空
intslistempty
(slist* s)
// 將鍊錶中有效節點清空
void
slistclear
(slist* s)
}// 銷毀鍊錶
void
slistdestroy
(slist* s)
void
printslist
(slist* s)
printf
("null\n");
}void
testslist()
void
testslist1()
void
testslist2()
intmain()
資料結構 鍊錶之單鏈表
單鏈錶即每個節點都存在資料域和指標域 特殊節點除外 每個節點都乙個直接前驅節點和直接後繼節點 頭節點無前驅,尾節點無後繼 簡單來說就是上乙個節點的指標域中存放了下乙個節點的位址,因此可以實現層層節點依次查詢,時間複雜度為o n 這也就是相對順序表而言的缺點,但是對於頻繁的插入和刪除節點卻是相對於順序...
資料結構(03) 單鏈表
鍊錶的節點均單向指向下乙個節點,形成一條單向訪問的資料鏈。typedef struct linknode linknode,linklist 鍊錶節點 鍊錶 bool initlist linklist l 構造乙個空的單鏈表 l bool listinsert front linklist l,l...
資料結構 鍊錶1(單鏈表)
資料結構 單鏈表 單鏈表的定義 單鏈表是用一組任意的儲存單元存放線性表的元素,這組儲存單元可以連續也可以不連續,甚至可以零散分布在記憶體中的任意位置。每個儲存單元在儲存資料元素的同時,還必須儲存其後記元素的位址資訊,這個位址資訊稱為指標。這兩部分組成了資料元素的儲存映像,稱為結點。結點node分為資...