linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include<stdlib.h> #include<stdio.h> #include<stdio.h> ; typedef struct LINKNODE { struct LINKNODE* next; }LinkNode; typedef void(*PRINTNODE)(LinkNode*); typedef struct LINKLIST { LinkNode head; int size; }LinkList; //初始化链表 LinkList* Init_LinkList(); //插入 void Insert_LinkList(LinkList* list,int pos,LinkNode* date); //删除 void Remove_LinkList(LinkList list ,int pos); //查找 int Find_LinkList(LinkList* list,LinkNode *date); //返回链表大小 int Size_LinkList(LinkList* list); //打印链表 void Print_LinkList(LinkList *list,PRINTNODE print); //释放链表内存 void FreeSpace_LinkList(LinkList* list); #endif
//linklist.c #include"linklist.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->head.next = NULL; list->size = 0; return list; } //插入 void Insert_LinkList(LinkList* list, int pos, LinkNode* date) { if (list == NULL) { return; } if (date == NULL) { return; } if (pos < 0 || list->size < pos) { pos = list->size; } //查找插入位置 LinkNode* pCurrent =&( list->head); for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } date->next = pCurrent->next; pCurrent->next = date; list->size++; return; } //删除 void Remove_LinkList(LinkList list, int pos) { return; } //查找 int Find_LinkList(LinkList * list, LinkNode * date) { return 0; } //返回链表大小 int Size_LinkList(LinkList* list) { return 0; } //打印链表 void Print_LinkList(LinkList* list, PRINTNODE print) { if (list == NULL) { return; } LinkNode* pCurrent = list->head.next; while (pCurrent != NULL) { print(pCurrent); pCurrent = pCurrent->next; } return; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if (list == NULL) { return; } free(list); return; }
//main.c #include"linklist.h" #include"linklist.h" typedef struct PERSION { LinkNode node; char name[64]; int age; }Persion; void MyPrint(LinkNode* date) { Persion* p = (Persion*)date; printf("name : %s Age: %d\n",p->name,p->age); } int main(void) { LinkList* list = Init_LinkList(); Persion p1, p2, p3, p4, p5; strcpy(p1.name, "p1"); strcpy(p2.name, "p2"); strcpy(p3.name, "p3"); strcpy(p4.name, "p4"); strcpy(p5.name, "p5"); p1.age = 1; p2.age = 2; p3.age = 3; p4.age = 4; p5.age = 5; //将节点插入链表 Insert_LinkList(list, 0, (LinkNode*)&p1); Insert_LinkList(list, 0, (LinkNode*)&p2); Insert_LinkList(list, 0, (LinkNode*)&p3); Insert_LinkList(list, 0, (LinkNode*)&p4); Insert_LinkList(list, 0, (LinkNode*)&p5); //打印 Print_LinkList(list, MyPrint); //释放链表内存 free(list); return 0; }