采用Linux内核链表的实现思想,通过业务节点包含链表节点来将数据串起来。
linkedList.h
<代码>的ifndef LINKED_LIST_H #定义LINKED_LIST_H # include# include # include typedef struct LinkedListNodeStruct { struct LinkedListNodeStruct *下; }LinkedListNode; typedef struct LinkedListStruct { LinkedListNode头; int长度; }LinkedList; LinkedList * LinkedList_Create (); 空白LinkedList_Destory (LinkedList *列表); 空白LinkedList_Clear (LinkedList *列表); int LinkedList_Length (LinkedList *列表); int LinkedList_Insert (LinkedList *列表,LinkedListNode *节点,int pos); LinkedListNode * LinkedList_Get (LinkedList *列表,int pos); LinkedListNode * LinkedList_Delete (LinkedList *列表,int pos); # endif//! LINKED_LIST_H 代码> >之前 linkedList.c
<代码> # include“linkedList.h” LinkedList * LinkedList_Create () { LinkedList *列表=malloc (sizeof (LinkedList)); memset(列表,0,sizeof (LinkedList)); 列表→长度=0; →列表头。下一个=零; 返回列表; } 空白LinkedList_Destory (LinkedList *列表){ 如果(列表!=NULL) { 免费(列表); 列表=零; } } 空白LinkedList_Clear (LinkedList *列表){ 如果(列表!=NULL) { 列表→长度=0; →列表头。下一个=零; } } int LinkedList_Length (LinkedList *列表){ 如果(列表!=NULL) { 返回列表→长度; } } int LinkedList_Insert (LinkedList *列表,LinkedListNode *节点,int pos) { 如果(列表==NULL | | pos & lt;0 | |节点==NULL) { 返回1; 流(stderr,“错误的论点。\ n”); } LinkedListNode * cur=,列表→头; int i=0; 虽然(我& lt;pos和,坏蛋→下一个!=NULL) { 坏蛋=cur→下; 我+ +; } 节点→下=cur→下; 坏蛋→下=节点; 列表→长度+ +; 返回0; } LinkedListNode * LinkedList_Get (LinkedList *列表,int pos) { 如果(列表==NULL | | pos & lt;0){ 返回NULL; 流(stderr,“错误的论点。\ n”); } LinkedListNode * cur=,列表→头; int i=0; 虽然(我& lt;pos和,坏蛋→下一个!=NULL) { 坏蛋=cur→下; 我+ +; } 返回cur→下; } LinkedListNode * LinkedList_Delete (LinkedList *列表,int pos) { 如果(列表==NULL | | pos & lt;0){ 返回1; 流(stderr,“错误的论点。\ n”); } LinkedListNode * cur=,列表→头; int i=0; 虽然(我& lt;pos和,坏蛋→下一个!=NULL) { 坏蛋=cur→下; 我+ +; } LinkedListNode * r=cur→下; 坏蛋→下=cur→下一步→下; 列表→长度,; 返回r; }代码>测试代码:
<代码> # include# include # include“linkedList.h” typedef struct BusinessNodeStruct { LinkedListNode节点; int id; char[30]名称; }BusinessNode; int main () { LinkedList *列表=LinkedList_Create (); BusinessNode t1={“Beijing1 NULL, 21日}; BusinessNode t2={" Beijing2 NULL, 31日}; BusinessNode t3={NULL, 41岁的“Beijing3”}; BusinessNode t4={NULL, 51岁,Beijing4 "}; LinkedList_Insert(列表,(LinkedListNode *), t2, 0); LinkedList_Insert(列表,和t3。节点,0); LinkedList_Insert(列表,(LinkedListNode *)和t4, 0); for (int i=0;我& lt;列表→长度;我+ +){ BusinessNode * bNode=(BusinessNode *) LinkedList_Get(列表,我); printf (" bNode→名称:% s, bNode→id: % d \ n”, bNode→名称、bNode→id); } LinkedList_Delete(清单1); printf(" - - - - - - - - - - - -删除- - - - - - - - - - - -”); for (int i=0;我& lt;列表→长度;我+ +){ BusinessNode * bNode=(BusinessNode *) LinkedList_Get(列表,我); printf (" bNode→名称:% s, bNode→id: % d \ n”, bNode→名称、bNode→id); } 系统(“暂停”); 返回0; }代码> linkedList.c
C语言实现单链表(LinkedList)