C語言 資料結構之單鏈表

2021-09-02 22:13:31 字數 3343 閱讀 5901

本文將實現單鏈表的基礎介面功能

1.初始化/銷毀

2.增刪改查

標頭檔案.h

#define _crt_secure_no_warnings 1

#pragma once

typedef

int sldatatype;

typedef

struct slistnode slistnode;

typedef

struct slist

}slist;

//介面

//初始化/銷毀

void

slistinit

(slist *list)

;void

slistdestroy

(slist *list)

;//增/刪/查/改

//頭插

void

slistpushfront

(slist *list, sldatatype data)

;//頭刪

void

slistpopfront

(slist *list)

;//尾插

void

slistpushback

(slist *list, sldatatype data)

;//尾刪

void

slistpopback

(slist *list)

;//查詢

slistnode *

slistfind

(slist *list, sldatatype data)

;//在pos結點後面插入

void

slistinsertafter

(slistnode *pos, sldatatype data)

;//刪除pos結點後面的結點

void

slisteraseafter

(slistnode *pos)

;//刪除第乙個遇到的data結點

void

slistremove

(slist *list, sldatatype data)

;//列印

void

slistprint

(slist *list)

;

函式實現部分slist.c

#define _crt_secure_no_warnings 1

#include

"slist.h"

#include

#include

#include

void

slistinit

(slist *list)

void

slistdestroy

(slist *list)

list->first =

null;}

//建立空間

slistnode *

buyslistnode

(sldatatype data)

//頭插

void

slistpushfront

(slist *list, sldatatype data)

//頭刪

void

slistpopfront

(slist *list)

//尾插

void

slistpushback

(slist *list, sldatatype data)

//先找出最後乙個結點

slistnode *cur = list->first;

for(

; cur->next !=

null

; cur = cur->next)

然後建立乙個結點

//slistnode *node = (slistnode *)malloc(sizeof(slistnode));

//assert(node != null);

賦值//node->data = data;

//node->next = null;

slistnode *node =

buyslistnode

(data)

; cur->next = node;

}//尾刪

void

slistpopback

(slist *list)

//找到倒數第二個結點

slistnode *cur = list->first;

for(

; cur->next->next !=

null

; cur = cur->next)

//先釋放,再指向空

free

(cur->next)

; cur->next =

null;}

//查詢

slistnode *

slistfind

(slist *list, sldatatype data)

}return

null;}

//在pos結點後面插入

void

slistinsertafter

(slistnode *pos, sldatatype data)

//刪除pos結點後邊的結點

void

slisteraseafter

(slistnode *pos)

//刪除第乙個遇到的data結點

void

slistremove

(slist *list, sldatatype data)

if(cur ==

null

)//如果prev為空就頭刪即可

if(prev ==

null

) prev->next = cur->next;

free

(cur);}

//列印

void

slistprint

(slist *list)

printf

("null\n");

}

測試部分test.c

#define _crt_secure_no_warnings 1

#include

"slist.h"

#include

#include

void

test1()

void

test2()

void

test3()

void

main()

c語言資料結構之單鏈表

本教程會在以後持續公布c語言資料結構的實現文章,一來重溫一下基礎知識,二來為正在學習此部分內容的同學提供參考和思路,教程內容均來自於書籍 分享和本人思考,側重 編寫和實現,詳細的理論論述還是要翻閱經典的書籍,在此感謝貢獻自己智慧型的廣大程式設計人員。今天的主題是單鏈表,這是一種非常常見的資料結構,隸...

c語言 資料結構 單鏈表

將線性表l a0,a1,an 1 中各元素分布在儲存器的不同儲存塊,稱為結點,通過位址或指標建立它們之間的聯絡,所得到的儲存結構為鍊錶結構,表中 ai的結點形式如圖表示 其中結點的data 域存放資料元素 ai,而 next 域是乙個指標,指向 ai的直接後繼 ai 1 所在的結點。單鏈表結構如下 ...

資料結構 單鏈表 C語言

單向鍊錶 鍊錶結點通常包含資料域與指標域,資料域用來儲存相關的使用者的資料,指標域用來指向下乙個結點。訪問單向鍊錶,需要從頭部 head 開始單向順序訪問,訪問終結於指標域 next 為null的結點 其儲存方式不同於以往的陣列,按照非連續位址方式儲存。優點 鍊錶長度可以實現動態增長,不必像陣列一樣...