单链表的实现
来源:互联网 发布:医疗大数据公司排名 编辑:程序博客网 时间:2024/04/30 15:15
1.实现创建、插入、删除、查找、遍历和销毁这几个操作。代码如下:
//// LinkList.h// LinkList//// Created by Mac on 15/11/22.// Copyright © 2015年 Mac. All rights reserved.//#ifndef LinkList_h#define LinkList_h#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>typedef struct _tagSList{ void* data; //data storage struct _tagSList* next;}SList,*PSList;typedef void(*ForEachFunc)(void*);typedef bool(*FindFunc)(void*,void*);//create a sigle listSList* ListCreate();//insert data in posint ListInsert(SList* list,int pos,void* data);//delete data in pos//return delete datavoid* ListDelete(SList* list,int pos);//find data//return find data or NULLvoid* ListFind(SList* list,FindFunc func,void* data);//foreachvoid ListForEach(SList* list,ForEachFunc func);//destroy listvoid ListDestroy(SList* list);#endif /* LinkList_h */
//// LinkList.c// LinkList//// Created by Mac on 15/11/22.// Copyright © 2015年 Mac. All rights reserved.//#include "LinkList.h"//create a sigle list//return list pointer when success,otherwise return NULLSList* ListCreate(){ SList* list = (SList*)malloc(sizeof(SList)); if (list == NULL) { return NULL; } memset(list,0,sizeof(SList)); return list;}//insert data in posint ListInsert(SList* list,int pos,void* data){ if (list == NULL || data == NULL || pos < 1) { return -1; } int i = 0; SList* p = list; SList* tmp = NULL; for (i = 0; i < pos-1; i++) { p = p->next; if(p == NULL) return -1; } SList* node = (SList*)malloc(sizeof(SList)); if (node == NULL) { return -1; } node->data = data; tmp = p->next; p->next = node; node->next = tmp; return 0;}//delete data in pos//return delete datavoid* ListDelete(SList* list,int pos){ if (list == NULL || pos < 1) { return NULL; } int i = 0; SList* p = list; SList * tmp = NULL; for (i = 0; i < pos-1; i++) { p = p->next; if(p == NULL) return NULL; } tmp = p->next; void* data = tmp->data; p->next = tmp->next; free(tmp); tmp = NULL; return data;}//find data//return find data or NULLvoid* ListFind(SList* list,FindFunc func,void* data){ if(list == NULL){ return NULL; } SList* p = list->next; while (p) { if(func != NULL){ if(func(p->data,data)){ return p->data; } } p = p->next; } return NULL;}//foreachvoid ListForEach(SList* list,ForEachFunc func){ if(list == NULL){ return; } SList* p = list->next; while (p) { if(func != NULL) func(p->data); p = p->next; }}//destroy listvoid ListDestroy(SList* list){ if (list == NULL) { return; } SList* p = list->next; SList * tmp = NULL; while (p) { tmp = p; free(p->data); p->data = NULL; free(p); p = NULL; p = tmp->next; } free(list); list = NULL;}
0 0
- 单链表的基础实现
- 数据结构-单链表的实现
- 循环单链表的实现
- 单链表的手动实现
- 单链表的操作实现
- 一个单链表的实现
- C++实现的单链表
- C#单链表的实现
- 简洁的单链表实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- Java单链表的实现
- js 实现的单链表
- 单链表的实现
- 单链表的实现。。。。。。。
- 前端入门方法总结
- 简单的求和
- poj 2516 Minimum Cost(最小费用最大流 spfa算法求最短路)
- gcc 编译器中 printf i++ 和 ++i 的输出
- Romberg(龙贝格)求积公式求解数值积分时的注意事项
- 单链表的实现
- Linux Advance--线程和fork
- 1093. Count PAT's (25)
- 多线程 NSOperation
- Google Protocol Buffers介绍
- samba ubuntu下快速配置
- C++ 学习(虚基类)
- FindBugs插件的安装与使用
- SDWebImage 第三方框架