單鏈表基本操作 資料結構

2021-09-13 12:05:22 字數 3502 閱讀 4972

鍊錶是一種物理儲存結構上非連續非順序的資料儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序來形成的。

單鏈表分為兩種:帶頭節點和不帶頭結點。在這裡,主要介紹不帶頭結點的單鏈表的基本操作。

標頭檔案:slist.h

typedef

int sdatatype;

typedef

struct slistnode//定義結點

node;

typedef

struct slist//鍊錶

slist;

void

slistinit

(slist* pl)

;//初始化鍊錶

node*

buyslistnode

(sdatatype data)

;//開闢乙個結點

void

slistpushback

(slist* pl, sdatatype data)

;//尾插

void

slistpopback

(slist* pl)

;//尾刪

void

slistpushfront

(slist* pl, sdatatype data)

;//頭插

void

slistpopfront

(slist* pl)

;//頭刪

//在鍊錶中查詢值為data的結點,找到返回該結點的位址,否則返回空

node*

slistfind

(slist* pl, sdatatype data)

;//在鍊錶結點pos位置後置入值為data的結點

void

slistinsertafter

(node* pos, sdatatype data)

;//刪除鍊錶中位置在pos的結點

void

slisterase

(slist* pl, node* pos)

;int

slistsize

(slist* pl)

;//獲取鍊錶中有效結點的個數

intslistempty

(slist* pl)

;//檢測鍊錶是否為空

node*

slistfront

(slist* pl)

;//獲取鍊錶第乙個結點

node*

slistback

(slist* pl)

;//獲取鍊錶的第二個結點

void

printslist

(slist* pl)

;//列印鍊錶

void

destoryslist

(slist* pl)

;//銷毀

原始檔:slist.c

#include

"slist.h"

#include

#include

#include

void

slistinit

(slist* pl)

//初始化

node*

buyslistnode

(sdatatype data)

//開闢乙個結點

pnode->data = data;

pnode->pnext =

null

;return pnode;

}void

slistpushback

(slist* pl, sdatatype data)

//尾插

pcur->pnext = pnewnode;}}

void

slistpopback

(slist* pl)

//尾刪

elseif(

null

== pl->phead->pnext)

//只有乙個結點

方法一:找到倒數第二個結點

else

//有兩個以上的結點

free

(ptailnode->pnext)

; ptailnode->pnext =

null;}

方法二:找到倒數第乙個結點,並儲存前乙個結點

else

free

(ptailnode)

; pprenode->pnext =

null;}

}void

slistpushfront

(slist* pl, sdatatype data)

void

slistpopfront

(slist* pl)

else

}// 在鍊錶中查詢值為data的節點,找到返回該節點的位址,否則返回空

node*

slistfind

(slist* pl, sdatatype data)

else

}return

null;}

void

slistinsertafter

(node* pos, sdatatype data)

void

slisterase

(slist* pl, node* pos)

//pos不在第乙個位置

pdelnode = pl->phead;

while

(pdelnode->pnext != pos)

pdelnode->pnext = pos->pnext;

free

(pos);}

void

printslist

(slist* pl)

//列印鍊錶

printf

("null\n");

}void

destoryslist

(slist* pl)

//銷毀鍊錶

pl->phead =

null;}

intslistsize

(slist* pl)

return count;

}int

slistempty

(slist* pl)

node*

slistfront

(slist* pl)

node*

slistback

(slist* pl)

return pcur;

}

測試檔案:test.c

#include

"slist.h"

#include

void

testslist1()

intmain()

資料結構樹的基本操作 資料結構 樹的基本操作

include include include gtree.h include linklist.h typedefstruct tag gtreenode gtreenode 樹的節點 struct tag gtreenode gtreedata data 節點自身資料 gtreenode par...

MySQL基本操作 資料操作

刪除資料 更新字段 1.插入指定字段值 insert into 表名 字段列表 values 對應字段值列表 2.向表中所有字段插入資料 insert into 表名 values 按表結構寫對應資料 insert into my teacher values liwei 20 1.查詢表中全部資料...

順序棧的基本操作 資料結構 一 棧結構

數 結 structure data 據 構 棧 結 構 s t a c k 前言 在計算機中儲存資料需要用到各種資料結構,一起來了解下棧結構吧。棧結構介紹 棧結構的宗旨就是先進後出 filo,first in last out 即先進入棧中的元素會在最後才能彈出。棧結構用圖形來表達的話就是這樣 棧...