企业级开发链表思路

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

在这里插入图片描述头文件代码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.mzph.cn/news/180057.shtml

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

相关文章

人工智能|机器学习——感知器算法原理与python实现

感知器算法是一种可以直接得到线性判别函数的线性分类方法&#xff0c;它是基于样本线性可分的要求下使用的。 一、线性可分与线性不可分 为了方便讨论&#xff0c;我们蒋样本增加了以为常数&#xff0c;得到增广样向量 y&#xff08;1;;;...;&#xff09;,则n个样本的集合为&a…

零信任安全:远程浏览器隔离(RBI)的重要性

引言 在当今数字化时代&#xff0c;网络安全已成为个人和企业关注的焦点。随着网络攻击和恶意软件的不断增加&#xff0c;远程浏览器隔离(RBI)SAAS系统变得至关重要。本文将深入探讨远程浏览器隔离系统的重要性&#xff0c;以及它如何帮助用户保护其网络免受恶意软件和网络攻击…

蓝桥杯day02——Fizz Buzz

1、题目 给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] &…

计算机杂谈系列精讲100篇-【计算机应用】PyTorch部署及分布式训练

目录 C平台PyTorch模型部署流程 1.模型转换 1. 不支持的操作 2. 指定数据类型 2.保存序列化模型 3.C load训练好的模型 4. 执行Script Module PyTorch分布式训练 分布式并行训练概述 Pytorch分布式数据并行 手把手渐进式实战 A. 单机单卡 B. 单机多卡DP C. 多机多卡DDP D. L…

Blender动画导入Three.js

你是否在把 Blender 动画导入你的 ThreeJS 游戏(或项目)中工作时遇到问题? 您的 .glb (glTF) 文件是否正在加载,但没有显示任何内容? 你的骨骼没有正确克隆吗? 如果是这样,请阅读我如何使用 SkeletonUtils.js 解决此问题 1、前提条件 你正在使用 Blender 3.1+(此版本…

mysql 性能排查

mysql 下常见遇到的问题有&#xff0c;mysql连接池耗尽&#xff0c;死锁、慢查、未提交的事务。等等我们可能需要看&#xff1b;我们想要查看的可能有 1.当前连接池连接了哪些客户端&#xff0c;进行了哪些操作 2.当前造成死锁的语句有哪些&#xff0c;是哪个客户端上的&#x…

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

vue3+ts 全局函数和变量的使用

<template><div>{{ $env }}<br />{{ $filters.format("的飞机") }}</div> </template><script setup lang"ts"> import { getCurrentInstance } from "vue"; const app getCurrentInstance(); console.log…

07-学成在线修改/查询课程的基本信息和营销信息

修改/查询单个课程信息 界面原型 第一步: 用户进入课程列表查询页面,点击编辑按钮编辑课程的相关信息 第二步: 进入编辑界面显示出当前编辑课程的信息,其中课程营销信息不是必填项,修改成功后会自动进入课程计划编辑页面 查询课程信息 请求/响应数据模型 使用Http Client测…

11月28日作业

提示并输入一个字符串&#xff0c;统计该字符中大写&#xff0c;小写字母个数&#xff0c;数字个数&#xff0c;空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;int A0,a0,num0,backspac…

UDS 相关时间参数

文章目录 UDS 全部时间参数UDS 应用层诊断时间参数1、P2 Client P2 Server P2* Client P2* Server 图例2、S3 Client S3 Server 图例 UDS CNA-TP网络层时间参数1、N_As/N_Ar 图例2、N_Bs 图例3、 N_Br 图例4、N_Cs 图例N_Cr 图例 UDS 网络层流控制时间参数 UDS 全部时间参数 UD…

智安网络|探索云安全合规要求:等保2.0时代的新趋势解析

随着信息技术的不断发展和应用的广泛普及&#xff0c;信息安全问题日益凸显&#xff0c;特别是在云计算时代&#xff0c;企业对于云平台的安全保障需求更为迫切。等级保护&#xff08;等保&#xff09;作为我国信息安全的基本要求&#xff0c;已经进入了2.0时代&#xff0c;对于…

深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动

文章目录 前言一、输入系统的基本组成部分二、输入系统相关源码分析1、IMS 构建1.1、SystemServer # startOtherServices()1.2、InputManagerService1.3、NativeInputManager # nativeInit()1.4、NativeInputManager1.5、InputManager1.6、InputDispatcher1.7、InputReader1.8、…

网络安全小白自学

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

2015年五一杯数学建模C题生态文明建设评价问题解题全过程文档及程序

2015年五一杯数学建模 C题 生态文明建设评价问题 原题再现 随着我国经济的迅速发展&#xff0c;生态文明越来越重要&#xff0c;生态文明建设被提到了一个前所未有的高度。党的十八大报告明确提出要大力推进生态文明建设&#xff0c;报告指出“建设生态文明&#xff0c;是关系…

【Python】torch.exp()和 torch.sigmoid()函数详解和示例

本文对torch.exp&#xff08;&#xff09;和 torch.sigmoid&#xff08;&#xff09;函数进行原理和示例讲解&#xff0c;以帮助大家理解和使用。 目录 torch.exp函数原理运行示例 torch.sigmoid&#xff08;&#xff09;函数原理运行示例torch.sigmoid相关知识 结合运行 torc…

2023网络安全产业图谱

1. 前言 2023年7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。 嘶吼安全产业研究院根据当前网络安全发展规划与趋势发布《嘶吼2023网络安全产业图谱》调研&#xff0c;旨在进一步了解…

Net6.0或Net7.0项目升级到Net8.0 并 消除.Net8中SqlSugar的警告

本文基于NetCore3.1或Net6.0项目升级到Net7.0&#xff0c;参考连接&#xff1a;NetCore3.1或Net6.0项目升级到Net7.0-CSDN博客 所有项目按照此步骤操作一遍&#xff0c;完成后再将所有引用的包&#xff08;即 *.dll&#xff09;更新升级到最新版&#xff08;注意&#xff1a;有…

在 CentOS 7 上安装 MySQL 8

在 CentOS 7 上安装 MySQL 8 步骤 1: 添加 MySQL Yum 存储库 首先&#xff0c;我们需要添加 MySQL Yum 存储库。打开终端并执行以下命令&#xff1a; sudo yum install -y https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm步骤 2: 导入 MySQL GPG 公钥 …

python-爬虫(可直接使用)

爬虫&#xff08;Web Scraping&#xff09;是指通过编程自动化地获取互联网上的信息的过程。爬虫的目的通常是从网页中抓取数据&#xff0c;进行数据分析、处理或展示。以下是爬虫的基本流程和一些重要的概念&#xff1a; 爬虫基本流程&#xff1a; 确定目标&#xff1a; 确定要…