企业级开发链表思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述项目结构
在这里插入图片描述头文件代码

在这里插入图片描述头文件代码LinkList.h

#ifndef LINKLIST_H
#define LINKLIST_H
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
// 链表小节点
typedef struct LINKBODE {struct LINKBODE* next;}LinkNode;
// 遍历的函数指针
typedef void(*PRINTNODE)(LinkNode*);
// 比较的函数指针
typedef int(*COMPARENODE)(LinkNode*, LinkNode*);// 链表节点
typedef struct LINKLIST {LinkNode head;int size;
}LinkList;// 初始化链表
LinkList* Init_LinkList();
// 插入
void Insert_LinkList(LinkList* list, int pos, LinkNode* data);
// 删除
void Remove_LinkList(LinkList* list, int pos);
// 查找
int Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE compare);
// reback
int Size_LinkList(LinkList* list);
// 打印
void Print_LinkList(LinkList* list, PRINTNODE print);
// 释放链表
void FreeSpace_LinkList(LinkList* list);#endif

cpp代码截图
在这里插入图片描述cpp文件详细代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#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 (strcmp(p1->name, p2->name) == 0 && p1->age == p2 -> age) {return 0;}return -1;
}// 初始化链表
LinkList* Init_LinkList() {// 使用这种方式初始化的链表不需要分配头结点LinkList* list = (LinkList*)malloc(sizeof(LinkList));list->head.next = NULL;list->size = 0;return list;
};
// 插入
void Insert_LinkList(LinkList* list, int pos, LinkNode* data) {// 对链表的参数进行判断if (list == NULL) {return;}if (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 Remove_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, LinkNode* data, COMPARENODE compare) {if (list == NULL) {return -1;}if (data == NULL) {return -1;}// 辅助指针变量进行遍历,获取到第一个数据LinkNode* pCurrent = list->head.next;int index = 0;int flag = -1;// 使用while循环进行遍历while (pCurrent != NULL) {// 判断,如果相等的话就返回0如果不相等的话就返回-1if (compare(pCurrent, data) == 0) {flag = index;break;}pCurrent = pCurrent->next;index++;}return flag;};
// reback
int Size_LinkList(LinkList* list) {return 0;};
// 打印
void Print_LinkList(LinkList* list, PRINTNODE print) {if (list == NULL) {return;}// 使用辅助指针变量进行遍历LinkNode* pCurrent = list->head.next;// 使用while循环while (pCurrent != NULL) {print(pCurrent);pCurrent = pCurrent->next;}};
// 释放链表
void FreeSpace_LinkList(LinkList* list) {// 释放内存空间,根据初始化的内容进行释放if (list == NULL) {return;}free(list);};int main(void)
{// 创建一个链表LinkList* list = Init_LinkList();// 创建数据Person p1, p2, p3, p4, p5;// 拷贝赋值strcpy(p1.name, "aaa");strcpy(p2.name, "nnn");strcpy(p3.name, "hhh");strcpy(p4.name, "qqq");strcpy(p5.name, "www");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, 0, (LinkNode*)&p3);Insert_LinkList(list, 0, (LinkNode*)&p4);Insert_LinkList(list, 0, (LinkNode*)&p5);// 打印Print_LinkList(list, MyPrint);// 删除节点Remove_LinkList(list, 2);// 打印printf("--------------------\n");Print_LinkList(list, MyPrint);// 查找Person findP ;strcpy(findP.name, "aaa");findP.age = 10;int pos = Find_LinkList(list,(LinkNode*)&findP, MyCompare);printf("位置 = %d\n", pos);// 释放链表内存FreeSpace_LinkList(list);system("pause");return 0;}

程序运行结果展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/226533.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础:标准库概览

1. 标准库介绍 Python 标准库非常庞大&#xff0c;所提供的组件涉及范围十分广泛&#xff0c;正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写)&#xff0c;Python 程序员必须依靠它们来实现系统级功能&#xff0c;例如文件 I/O&#xff0c;此外还有大量以 Pyt…

数字电源为什么一般用DSP控制,而不能用普通的单片机?

数字电源为什么一般用DSP控制&#xff0c;而不能用普通的单片机&#xff1f; 首先你要清楚&#xff0c;数字电源需要一个芯片具备什么功能&#xff1f; 1 能发PWM波 &#xff0c;并且具备保护关断功能&#xff1b; 电源对PWM发波 要求很高&#xff0c;精度要ns级甚至ps级的&…

你敢信?四行Python代码就能知道你那的天气!

今天给大家带来的Python实战项目是四行Python代码获取所在城市的天气预报&#xff0c;我们隐隐听到唏嘘声&#xff0c;不信四行Python代码可以获取是吗?那我们一起来看看&#xff1a; 四行Python代码就能知道你那的天气&#xff0c;你敢信&#xff1f; 使用Python获取天气预报…

【Linux】yum -- 软件包管理器

目录 一、Linux中是如何安装软件的 1.1 安装的方法 1.2 安装的本质(基本理解) 二、软件包 2.1 软件包的概念 2.2 为什么要有软件包 三、yum--软件包管理器 3.1 yum的概念 3.2 yum的使用 3.2.1 搜索一个软件 3.2.2 安装一个软件 3.2.3 卸载一个软件 3.3 yum源更新 …

图书管理系统源码,图书管理系统开发,图书借阅系统源码配置和运行图解源码已附加

目录 配置简介和软件条件 数据库附件配置 vs应用程序web.config配置数据库链接字符串 数据库文件脚本代码 配置简介和软件条件 所需要的软件是Vs2017以上数据库是Sqlserver2012以上,如果数据库附件不了可以使用数据库脚本附件数据库脚本会在文章末尾写出来。可以直接复制到…

51单片机项目(17)——基于51单片机的双机通信系统

1.功能设计 本次实现的功能如下&#xff1a; 发送端通过串口向接收端循环发送字符0~F&#xff0c;并且实时显示在数码管上 接收端通过串口接收数据&#xff0c;将接收到的数据实时显示在数码管上。 &#xff08;需要完整工程的移步至最后 包括发送端代码 接收端代码 仿真图…

vue+uniapp校园寻物失物招领平台 微信小程序1f6z5

系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员菜单来管理后台系统。主要功能有&#xff1a;首页、个人中心、用户管理、物品分类管理、物品信息管理、物品归还管理、留言板管理、系统管理等功能。管理员用例如图3-7所示。 对于本网上失物招领小程序…

js闭包的必要条件及创建和消失(生命周期)

>创建闭包的必要条件&#xff1a; 1.函数嵌套 2.内部函数引用外部函数的变量 3.将内部函数作为返回值返回 >闭包是什么&#xff1f; 就是可以访问外部函数&#xff08;作用域&#xff09;中变量的内部函数 > 闭包是什么时候产生的&#xff1f; - 当调用外部函数…

初识Java 18-4 泛型

目录 泛型存在的问题 在泛型中使用基本类型 实现参数化接口 类型转换和警告 无法实现的重载 基类会劫持接口 自限定类型 奇异递归类型 自限定 自限定提供的参数协变性 本笔记参考自&#xff1a; 《On Java 中文版》 泛型存在的问题 接下来讨论的&#xff0c;是在泛型…

爱芯元智AX650N部署yolov8s 自定义模型

爱芯元智AX650N部署yolov8s 自定义模型 本博客将向你展示零基础一步步的部署好自己的yolov8s模型&#xff08;博主展示的是自己训练的手写数字识别模型&#xff09;&#xff0c;本博客教你从训练模型到转化成利于Pulsar2 工具量化部署到开发板上 训练自己的YOLOv8s模型 准备自…

神经网络:脑科学中功能MRI成像的应用及其一些相关概念

文章目录 一、MRI成像简介核磁共振成像&#xff08;MRI&#xff09;侵入式成像功能磁共振成像&#xff08;fMRI&#xff09;血氧水平依赖&#xff08;BOLD&#xff09;效应对比基线状态代理指标 二、fMRI具有延迟性及其解决方案原因解决方法 三、fMRI 数据处理1. 数据预处理2. …

《2023全球隐私计算报告》正式发布!

2023全球隐私计算报告 1、2023全球隐私计算图谱2、国内外隐私计算相关政策3、隐私计算技术的最新发展4、隐私计算技术的合规挑战5、隐私计算的应用市场动态6、隐私计算开源整体趋势7、隐私计算的未来趋势 11月23日&#xff0c;由浙江省人民政府、商务部共同主办&#xff0c;杭州…