单链表源码二

来源:互联网 发布:华为网络交换机的作用 编辑:程序博客网 时间:2024/05/22 10:54

单链表源码

1.头文件

#pragma #include <stdio.h>#include <stdlib.h>typedef struct _LinkNode{struct _LinkNode *next;}LinkNode;/*头节点*/typedef struct _LinkHead{LinkNode Head;int size;}LinkHead;typedef void * LINKLIST;/*声明打印函数别名*/typedef void(DATAPRINT)(LINKLIST);/*初始化头节点*/LINKLIST Init_LinkList();/*指定位置插入节点*/void Insert_LinkList(LINKLIST list, int pos, LinkNode *data);/*删除指定位置节点*/void Remove_LinkList(LINKLIST list, int pos);/*获取链表大小*/int GetSize_LinkList(LINKLIST list);/*打印链表数据*/void Print_LinkList(LINKLIST list, DATAPRINT print);/*内存释放*/void Destroy_LinkList(LINKLIST list);

2.实现文件

#include "LinkList.h"/*初始化头节点*/LINKLIST Init_LinkList(){LinkHead *list = (LinkHead *)malloc(sizeof(LinkHead));if (list == NULL){return NULL;}list->Head.next = NULL;list->size = 0;return list;}/*指定位置删除节点*/void Insert_LinkList(LINKLIST list, int pos, LinkNode *data){if (list == NULL){return NULL;}LinkHead *llist = (LinkHead *)list;/*判断是否越界*/if (pos < 0 || pos > llist->size){pos = llist->size;}/*辅助指针变量*/LinkNode *pCurrent = &(llist->Head);for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}/*插入该数据节点*/data->next = pCurrent->next;pCurrent->next = data;llist->size++;}/*删除指定位置节点*/void Remove_LinkList(LINKLIST list, int pos){if (list == NULL){return NULL;}LinkHead *llist = (LinkHead *)list;/*处理越界*/if (pos < 0 || pos >= llist->size){return NULL;}/*遍历找到节点*/LinkNode *pCurrent = &(llist->Head);for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}/*删除节点*/pCurrent->next = pCurrent->next->next;llist->size--;}/*获取链表大小*/int GetSize_LinkList(LINKLIST list){if (list == NULL){return -1;}LinkHead *llist = (LinkHead *)list;return llist->size;}/*打印链表数据*/void Print_LinkList(LINKLIST list, DATAPRINT print){if (list == NULL){return NULL;}LinkHead *llist = (LinkHead *)list;/*遍历打印*/LinkNode *pCurrent = &(llist->Head);for (int i = 0; i < llist->size; i++){pCurrent = pCurrent->next;print(pCurrent);}}/*内存释放*/void Destroy_LinkList(LINKLIST list){if (list == NULL){return NULL;}free(list);}

3.测试文件

#include <stdio.h>#include <stdlib.h>#include "LinkList.h"/*数据结构体*/typedef struct _Person{LinkNode *node;char name[64];int age;}Person;/*打印数据函数*/void MyPrint(LinkNode *data){if (data == NULL){return NULL;}Person *person = (Person *)data;printf("name:%s \t age:%d\n", person->name, person->age);}/*释放内存*/void Destroy_Person(LINKLIST list){if (list == NULL){return NULL;}LinkHead *llist = (LinkHead *)list;/*遍历链表*/LinkNode *pCurrent = llist->Head.next;LinkNode *pDel = pCurrent;for (int i = 0; i < llist->size - 1; i++){pCurrent = pCurrent->next;free(pDel);pDel = pCurrent;}}/*测试*/void test(){Person *p1 = (Person *)malloc(sizeof(Person));p1->node = NULL;strcpy(p1->name, "aaa");p1->age = 11;Person *p2 = (Person *)malloc(sizeof(Person));p2->node = NULL;strcpy(p2->name, "bbb");p2->age = 22;Person *p3 = (Person *)malloc(sizeof(Person));p3->node = NULL;strcpy(p3->name, "ccc");p3->age = 33;Person *p4 = (Person *)malloc(sizeof(Person));p4->node = NULL;strcpy(p4->name, "ddd");p4->age = 44;Person *p5 = (Person *)malloc(sizeof(Person));p5->node = NULL;strcpy(p5->name, "eee");p5->age = 55;LINKLIST list = Init_LinkList();Insert_LinkList(list, 0, (LinkNode *)p1);Insert_LinkList(list, 1, (LinkNode *)p2);Insert_LinkList(list, 2, (LinkNode *)p3);Insert_LinkList(list, 3, (LinkNode *)p4);Insert_LinkList(list, 4, (LinkNode *)p5);Print_LinkList(list, MyPrint);printf("---------------------------------------\n");Remove_LinkList(list, 3);Print_LinkList(list, MyPrint);printf("--------------------------------------\n");int size = GetSize_LinkList(list);printf("size = %d\n", size);Destroy_Person(list);Destroy_LinkList(list);}int main(){test();system("pause");return 0;}



0 0
原创粉丝点击