C++实现企业链表(单向链表的另外一种实现方式)

C++实现企业链表(单向链表的另外一种实现方式),第1张

概述LinkList.h   #include <windows.h>#include <stdio.h>// 链表小结点typedef struct LINKNODE{ LINKNODE* next;}LinkNode;// 链表结点typedef struct LINKLIST{ LinkNode head; int size;

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++实现企业链表(单向链表的另外一种实现方式)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存