单链表源码二
来源:互联网 发布:华为网络交换机的作用 编辑:程序博客网 时间: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
- 单链表源码二
- Chrome源码剖析【二】
- Xwork2 源码阅读(二)
- Mangos源码分析(二)
- live555源码阅读二
- ConcurrentHashMap 源码分析 (二)
- Notepad++源码分析(二)
- distcc源码研究二
- Chrome源码剖析【二】
- SEDA源码解读(二)
- gSOAP 源码分析(二)
- 源码分享(二)
- Chrome源码剖析【二】
- shopqi源码分析二
- Chrome源码剖析【二】
- VLC源码分析(二)
- mongodb源码分析(二)
- VLC源码分析(二)
- 面试笔试真题(1)
- swift 之UIWebView
- 微软云计算随笔1-批量为虚拟机添加IP地址描述
- 《Java多线程编程核心技术》---Thread用run( )启动和用start( )区别
- 计算广告系列篇(6)------推荐
- 单链表源码二
- 玩转AppBarLayout,更酷炫的顶部栏
- 使用MERGE方便快捷地更新数据表
- 捕获Java内存泄露 (五)
- tableau安装
- javascript 基础 增强版JS图片库 平稳退化
- 数值分析 第二章 解线性方程组的直接方法
- 选项菜单
- 微信公众号基础04_分享和录音功能的实现