linkList.h
#include <windows.h>#include <stdio.h>// 链表小结点typedef struct linkNODE{ linkNODE* next;}linkNode;// 链表结点typedef struct linkList{ linkNode head; int size;}linkList;// 遍历结点的函数指针typedef voID(*PRINTlinkNODE)(linkNode*);// 比较函数指针typedef int(*COMPARENODE)(linkNode*,linkNode*);// 初始化链表linkList* Init_linkList();// 根据位置插入语一个结点voID Insert_linkList(linkList* List,int pos,linkNode* data);// 根据位置删除一个结点voID RemoveByPos_linkList(linkList* List,int pos);// 查找结点int Find_linkList(linkList* List,linkNode* data,COMPARENODE compare);// 返回链表的大小int Size_linkList(linkList* List);// 打印链表voID Print_linkList(linkList* List,PRINTlinkNODE print);// 释放内存voID FreeMem_linkList(linkList* List);
linkList.cpp
#include "linkList.h"// 初始化链表linkList* Init_linkList(){ linkList* List = (linkList*)malloc(sizeof(linkList)); List->size = 0; List->head.next = NulL; return List;}// 根据位置插入语一个结点voID Insert_linkList(linkList* List,linkNode* data){ if (List == NulL || data == NulL) { return; } if (pos < 0 || pos >= List->size) { pos = List->size; } linkNode* pCurrent = &(List->head); for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } data->next = pCurrent->next; pCurrent->next = data; List->size++;}// 根据位置删除一个结点voID RemoveByPos_linkList(linkList* List,int pos){ if (List == NulL) { return; } if (pos < 0 || pos >= List->size) { return; } linkNode* pCurrent = &(List->head); for (int i = 0; i < pos; i++) { pCurrent = pCurrent->next; } pCurrent->next = pCurrent->next->next; List->size--;}// 查找结点int Find_linkList(linkList* List,COMPARENODE compare){ if (List == NulL || data == NulL) { return -1; } int flag = -1; int index = 0; linkNode* pCurrent = List->head.next; while (pCurrent != NulL) { if (compare(data,pCurrent) == 0) { flag = index; break; } pCurrent = pCurrent->next; index++; } return flag;}// 返回链表的大小int Size_linkList(linkList* List){ if (List == NulL) { return -1; } return List->size;}// 打印链表voID Print_linkList(linkList* List,PRINTlinkNODE print){ if (List == NulL) { return; } linkNode* pCurrent = List->head.next; while (pCurrent != NulL) { print(pCurrent); pCurrent = pCurrent->next; }}// 释放内存voID FreeMem_linkList(linkList* List){ if (List == NulL) { return; } free(List);}
main.cpp
#include "linkList.h"typedef struct PERSON{ linkNode node; char name[64]; int age;}Person;voID MyPrint(linkNode* data){ Person* p = (Person*)data; printf("name:%s,Age:%d\n",p->name,p->age);}int MyCompare(linkNode* node1,linkNode* node2){ Person* p1 = (Person*)node1; Person* p2 = (Person*)node2; if ((p1->age == p2->age) && (strcmp(p1->name,p2->name) == 0)) { return 0; } return -1;}int main(){ //创建链表 linkList* List = Init_linkList(); //创建数据 Person p1,p2,p3,p4,p5; strcpy_s(p1.name,sizeof("aaa"),"aaa"); strcpy_s(p2.name,sizeof("bbb"),"bbb"); strcpy_s(p3.name,sizeof("ccc"),"ccc"); strcpy_s(p4.name,sizeof("ddd"),"ddd"); strcpy_s(p5.name,sizeof("eee"),"eee"); p1.age = 10; p2.age = 20; p3.age = 30; p4.age = 40; p5.age = 50; //将结点插入链表 Insert_linkList(List,0,(linkNode*)&p1); Insert_linkList(List,0,(linkNode*)&p2); Insert_linkList(List,(linkNode*)&p3); Insert_linkList(List,(linkNode*)&p4); Insert_linkList(List,(linkNode*)&p5); //打印 Print_linkList(List,MyPrint); //删除结点 RemoveByPos_linkList(List,2); //打印 printf("---------------\n"); Print_linkList(List,MyPrint); printf("---------------\n"); //查找 Person findP; strcpy_s(findP.name,"bbb"); findP.age = 20; int pos = Find_linkList(List,(linkNode*)&findP,MyCompare); printf("位置:%d\n",pos); //释放链表内存 FreeMem_linkList(List); getchar(); return 0;}总结
以上是内存溢出为你收集整理的C++实现企业链表(单向链表的另外一种实现方式)全部内容,希望文章能够帮你解决C++实现企业链表(单向链表的另外一种实现方式)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)