1 #ifndef LINKLIST_H 2 #define LINKLIST_H 3 4 #include5 #include 6 7 //链表结点 8 typedef struct LINKNODE { 9 void* data; //指向任何类型的数据 10 struct LINKENODE* next; 11 }LinkNode; 12 13 //链表结构体 14 typedef struct LINKLIST { 15 LinkNode* head; 16 int size; 17 }LinkList; 18 19 //打印函数指针 20 typedef void(*PRINTLINKNODE)(void*); 21 22 //初始化链表 23 LinkList* Init_LinkList(); 24 //指定位置插入 25 void Insert_LinkList(LinkList* list, int pos, void* data); 26 //删除指定位置的值 27 void RemoveByPos_LinkList(LinkList* list, int pos); 28 //获得链表的长度 29 int Size_LinkList(LinkList* list); 30 //查找 31 int Find_LinkList(LinkList* list, void* data); 32 //打印链表结点 33 void print_LinkList(LinkList* list, PRINTLINKNODE print); 34 //返回第一个结点 35 void* Front_LinkList(LinkList* list); 36 #endif
#include"LinkList.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->size = 0; //头结点是不保存数据信息的 list->head = malloc(sizeof(LinkNode)); list->head->data = NULL; list->head->next = NULL; return list; } //指定位置插入 void Insert_LinkList(LinkList* list, int pos, void* data) { if (list == NULL) { return; } if (data == NULL) { return; } //友好的处理,pos越界 if (pos < 0 || list->size) { pos = list->size; } //创建新的结点 LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode)); newnode->data=data; newnode->next = NULL; //找结点 //辅助指针变量 LinkNode* pCurrent = list->head; for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } //新结点入链表 newnode->next = pCurrent->next; pCurrent->next = newnode; list->size++; } //删除指定位置的值 void RemoveByPos_LinkList(LinkList* list, int pos) { if (list == NULL) { return; } if (pos < 0 || list->size) { return; } //查找删除结点的前一个结点 LinkNode* pCurrnet = list->head; for (int i = 0; i < pos; i++) { pCurrnet = pCurrnet->next; } //缓存删除的结点 LinkNode* pDel = pCurrnet->next; pCurrnet->next = pDel->next; //释放删除结点的内存 free(pDel); list->size--; } //获得链表的长度 int Size_LinkList(LinkList* list) { return list->size; } //查找 int Find_LinkList(LinkList* list, void* data) { if (list == NULL) { return -1; } if (data == NULL) { return -1 ; } //遍历查找 LinkNode* pCurrent = list->head->next; int i = 0; while (pCurrent != NULL) { if (pCurrent->data == data) { break; } i++; pCurrent = pCurrent->next; } return i; } //打印链表结点 void print_LinkList(LinkList* list, PRINTLINKNODE print) { if (list == NULL) { return; } //辅助指针变量 LinkNode* pCurrent = list->head->next; while (pCurrent != NULL) { print(pCurrent->data); pCurrent = pCurrent->next; } } //返回第一个结点 void* Front_LinkList(LinkList* list) { return list->head->next; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if(list==NULL){ return; } //辅助指针变量 LinkNode* pCurrent = list->head; while (pCurrent != NULL) { //缓存下一个结点 LinkNode* pNext = pCurrent->next; free(pCurrent); pCurrent = pNext; } //释放链表内存 list->size = 0; free(list); }
#include"LinkList.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->size = 0; //头结点是不保存数据信息的 list->head = malloc(sizeof(LinkNode)); list->head->data = NULL; list->head->next = NULL; return list; } //指定位置插入 void Insert_LinkList(LinkList* list, int pos, void* data) { if (list == NULL) { return; } if (data == NULL) { return; } //友好的处理,pos越界 if (pos < 0 || list->size) { pos = list->size; } //创建新的结点 LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode)); newnode->data=data; newnode->next = NULL; //找结点 //辅助指针变量 LinkNode* pCurrent = list->head; for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } //新结点入链表 newnode->next = pCurrent->next; pCurrent->next = newnode; list->size++; } //删除指定位置的值 void RemoveByPos_LinkList(LinkList* list, int pos) { if (list == NULL) { return; } if (pos < 0 || list->size) { return; } //查找删除结点的前一个结点 LinkNode* pCurrnet = list->head; for (int i = 0; i < pos; i++) { pCurrnet = pCurrnet->next; } //缓存删除的结点 LinkNode* pDel = pCurrnet->next; pCurrnet->next = pDel->next; //释放删除结点的内存 free(pDel); list->size--; } //获得链表的长度 int Size_LinkList(LinkList* list) { return list->size; } //查找 int Find_LinkList(LinkList* list, void* data) { if (list == NULL) { return -1; } if (data == NULL) { return -1 ; } //遍历查找 LinkNode* pCurrent = list->head->next; int i = 0; while (pCurrent != NULL) { if (pCurrent->data == data) { break; } i++; pCurrent = pCurrent->next; } return i; } //打印链表结点 void print_LinkList(LinkList* list, PRINTLINKNODE print) { if (list == NULL) { return; } //辅助指针变量 LinkNode* pCurrent = list->head->next; while (pCurrent != NULL) { print(pCurrent->data); pCurrent = pCurrent->next; } } //返回第一个结点 void* Front_LinkList(LinkList* list) { return list->head->next; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if(list==NULL){ return; } //辅助指针变量 LinkNode* pCurrent = list->head; while (pCurrent != NULL) { //缓存下一个结点 LinkNode* pNext = pCurrent->next; free(pCurrent); pCurrent = pNext; } //释放链表内存 list->size = 0; free(list); }
#include"LinkList.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->size = 0; //头结点是不保存数据信息的 list->head = malloc(sizeof(LinkNode)); list->head->data = NULL; list->head->next = NULL; return list; } //指定位置插入 void Insert_LinkList(LinkList* list, int pos, void* data) { if (list == NULL) { return; } if (data == NULL) { return; } //友好的处理,pos越界 if (pos < 0 || list->size) { pos = list->size; } //创建新的结点 LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode)); newnode->data=data; newnode->next = NULL; //找结点 //辅助指针变量 LinkNode* pCurrent = list->head; for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } //新结点入链表 newnode->next = pCurrent->next; pCurrent->next = newnode; list->size++; } //删除指定位置的值 void RemoveByPos_LinkList(LinkList* list, int pos) { if (list == NULL) { return; } if (pos < 0 || list->size) { return; } //查找删除结点的前一个结点 LinkNode* pCurrnet = list->head; for (int i = 0; i < pos; i++) { pCurrnet = pCurrnet->next; } //缓存删除的结点 LinkNode* pDel = pCurrnet->next; pCurrnet->next = pDel->next; //释放删除结点的内存 free(pDel); list->size--; } //获得链表的长度 int Size_LinkList(LinkList* list) { return list->size; } //查找 int Find_LinkList(LinkList* list, void* data) { if (list == NULL) { return -1; } if (data == NULL) { return -1 ; } //遍历查找 LinkNode* pCurrent = list->head->next; int i = 0; while (pCurrent != NULL) { if (pCurrent->data == data) { break; } i++; pCurrent = pCurrent->next; } return i; } //打印链表结点 void print_LinkList(LinkList* list, PRINTLINKNODE print) { if (list == NULL) { return; } //辅助指针变量 LinkNode* pCurrent = list->head->next; while (pCurrent != NULL) { print(pCurrent->data); pCurrent = pCurrent->next; } } //返回第一个结点 void* Front_LinkList(LinkList* list) { return list->head->next; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if(list==NULL){ return; } //辅助指针变量 LinkNode* pCurrent = list->head; while (pCurrent != NULL) { //缓存下一个结点 LinkNode* pNext = pCurrent->next; free(pCurrent); pCurrent = pNext; } //释放链表内存 list->size = 0; free(list); }
#include"LinkList.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->size = 0; //头结点是不保存数据信息的 list->head = malloc(sizeof(LinkNode)); list->head->data = NULL; list->head->next = NULL; return list; } //指定位置插入 void Insert_LinkList(LinkList* list, int pos, void* data) { if (list == NULL) { return; } if (data == NULL) { return; } //友好的处理,pos越界 if (pos < 0 || list->size) { pos = list->size; } //创建新的结点 LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode)); newnode->data=data; newnode->next = NULL; //找结点 //辅助指针变量 LinkNode* pCurrent = list->head; for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } //新结点入链表 newnode->next = pCurrent->next; pCurrent->next = newnode; list->size++; } //删除指定位置的值 void RemoveByPos_LinkList(LinkList* list, int pos) { if (list == NULL) { return; } if (pos < 0 || list->size) { return; } //查找删除结点的前一个结点 LinkNode* pCurrnet = list->head; for (int i = 0; i < pos; i++) { pCurrnet = pCurrnet->next; } //缓存删除的结点 LinkNode* pDel = pCurrnet->next; pCurrnet->next = pDel->next; //释放删除结点的内存 free(pDel); list->size--; } //获得链表的长度 int Size_LinkList(LinkList* list) { return list->size; } //查找 int Find_LinkList(LinkList* list, void* data) { if (list == NULL) { return -1; } if (data == NULL) { return -1 ; } //遍历查找 LinkNode* pCurrent = list->head->next; int i = 0; while (pCurrent != NULL) { if (pCurrent->data == data) { break; } i++; pCurrent = pCurrent->next; } return i; } //打印链表结点 void print_LinkList(LinkList* list, PRINTLINKNODE print) { if (list == NULL) { return; } //辅助指针变量 LinkNode* pCurrent = list->head->next; while (pCurrent != NULL) { print(pCurrent->data); pCurrent = pCurrent->next; } } //返回第一个结点 void* Front_LinkList(LinkList* list) { return list->head->next; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if(list==NULL){ return; } //辅助指针变量 LinkNode* pCurrent = list->head; while (pCurrent != NULL) { //缓存下一个结点 LinkNode* pNext = pCurrent->next; free(pCurrent); pCurrent = pNext; } //释放链表内存 list->size = 0; free(list); }
#include"LinkList.h" //初始化链表 LinkList* Init_LinkList() { LinkList* list = (LinkList*)malloc(sizeof(LinkList)); list->size = 0; //头结点是不保存数据信息的 list->head = malloc(sizeof(LinkNode)); list->head->data = NULL; list->head->next = NULL; return list; } //指定位置插入 void Insert_LinkList(LinkList* list, int pos, void* data) { if (list == NULL) { return; } if (data == NULL) { return; } //友好的处理,pos越界 if (pos < 0 || list->size) { pos = list->size; } //创建新的结点 LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode)); newnode->data=data; newnode->next = NULL; //找结点 //辅助指针变量 LinkNode* pCurrent = list->head; for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } //新结点入链表 newnode->next = pCurrent->next; pCurrent->next = newnode; list->size++; } //删除指定位置的值 void RemoveByPos_LinkList(LinkList* list, int pos) { if (list == NULL) { return; } if (pos < 0 || list->size) { return; } //查找删除结点的前一个结点 LinkNode* pCurrnet = list->head; for (int i = 0; i < pos; i++) { pCurrnet = pCurrnet->next; } //缓存删除的结点 LinkNode* pDel = pCurrnet->next; pCurrnet->next = pDel->next; //释放删除结点的内存 free(pDel); list->size--; } //获得链表的长度 int Size_LinkList(LinkList* list) { return list->size; } //查找 int Find_LinkList(LinkList* list, void* data) { if (list == NULL) { return -1; } if (data == NULL) { return -1 ; } //遍历查找 LinkNode* pCurrent = list->head->next; int i = 0; while (pCurrent != NULL) { if (pCurrent->data == data) { break; } i++; pCurrent = pCurrent->next; } return i; } //打印链表结点 void print_LinkList(LinkList* list, PRINTLINKNODE print) { if (list == NULL) { return; } //辅助指针变量 LinkNode* pCurrent = list->head->next; while (pCurrent != NULL) { print(pCurrent->data); pCurrent = pCurrent->next; } } //返回第一个结点 void* Front_LinkList(LinkList* list) { return list->head->next; } //释放链表内存 void FreeSpace_LinkList(LinkList* list) { if(list==NULL){ return; } //辅助指针变量 LinkNode* pCurrent = list->head; while (pCurrent != NULL) { //缓存下一个结点 LinkNode* pNext = pCurrent->next; free(pCurrent); pCurrent = pNext; } //释放链表内存 list->size = 0; free(list); }