本文將實現單鏈表的基礎介面功能
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的結點 其儲存方式不同於以往的陣列,按照非連續位址方式儲存。優點 鍊錶長度可以實現動態增長,不必像陣列一樣...