資料結構03 鍊錶之單鏈表

2021-09-20 23:00:09 字數 3735 閱讀 9904

鍊錶帶頭結點和不帶頭結點的區別?

完成單鏈表的以下基本操作

完整**

鍊錶的結構非常多樣,以下情況組合起來就有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分為資...