linux链表应用2

以下是根据您的要求对示例代码进行优化的结果:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义路径节点结构体
typedef struct PathNode {unsigned int fildid;char folderName[100];  // 文件夹名字struct PathNode* next;  // 指向下一个节点的指针
} PathNode;// 添加路径节点函数
PathNode* addPathNode(PathNode* head, unsigned int fildid, const char* folderName) {PathNode* newNode = (PathNode*)malloc(sizeof(PathNode));newNode->fildid = fildid;strcpy(newNode->folderName, folderName);newNode->next = NULL;if (head == NULL) {return newNode;  // 如果链表为空,新节点为头节点} else {PathNode* currentNode = head;while (currentNode->next != NULL) {currentNode = currentNode->next;  // 找到链表末尾的节点}currentNode->next = newNode;  // 将新节点添加到链表末尾return head;}
}// 打印路径函数
void printPath(PathNode* head) {printf("Path: ");while (head != NULL) {printf("%s/", head->folderName);head = head->next;}printf("\n");
}// 释放路径节点内存函数
void freePath(PathNode* head) {PathNode* currentNode = head;while (currentNode != NULL) {PathNode* temp = currentNode;currentNode = currentNode->next;free(temp);}
}int main() {PathNode* head = NULL;  // 定义路径链表的头节点// 示例添加路径节点head = addPathNode(head, 1, "first_folder");head = addPathNode(head, 2, "second_folder");head = addPathNode(head, 3, "third_folder");// 示例打印路径printPath(head);// 示例释放路径节点内存freePath(head);return 0;
}

在优化之后的代码中,将 addPathNode 函数返回了头节点,而不是通过指针传递的方式进行修改。这样可以提高代码的可读性和易用性。同时,还增加了 fildid 字段,用于存储文件夹的标识符。其他部分的代码保持不变。

请注意,在优化代码时,我将 PathNode 结构体中字段的顺序进行了调整,以遵循良好的内存对齐原则,提高内存使用效率。

要删除路径节点,你需要进行以下步骤:

  1. 找到要删除的节点。遍历链表,找到需要删除的节点。如果链表为空或者要删除的节点是头节点,需要单独处理。

  2. 修改链表指针。将要删除的节点从链表中移除,需要修改前一个节点的 next 指针,将其指向要删除节点的下一个节点。

  3. 释放节点内存。删除节点后,记得释放该节点的内存,防止内存泄漏。

以下是一个示例函数来删除路径节点:

void deletePathNode(PathNode** head, unsigned int fildid) {if (*head == NULL) {printf("空链表\n");return;}PathNode* currentNode = *head;PathNode* previousNode = NULL;// 查找要删除的节点while (currentNode != NULL && currentNode->fildid != fildid) {previousNode = currentNode;currentNode = currentNode->next;}// 处理节点不存在情况if (currentNode == NULL) {printf("节点 %d 不存在\n", fildid);return;}// 处理要删除的节点是头节点的情况if (previousNode == NULL) {*head = currentNode->next;} else {// 修改前一个节点的指针previousNode->next = currentNode->next;}// 释放节点内存free(currentNode);
}

使用示例:

// 示例删除节点
deletePathNode(&head, 2);// 示例打印路径
printPath(head);// 示例释放路径节点内存
freePath(head);

在示例代码中,注意 deletePathNode 函数使用了 PathNode** 类型的参数,这样可以直接修改参数传入的指针的指向,以修改链表的头指针。另外,要删除的节点通过 fildid 进行匹配,你可以根据实际情况使用其他方式进行匹配。

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

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

相关文章

C#网络编程(System.Net命名空间)

目录 一、System.Net命名空间 1.Dns类 &#xff08;1&#xff09;示例源码 &#xff08;2&#xff09;生成效果 2.IPAddress类 &#xff08;1&#xff09;示例源码 &#xff08;2&#xff09;生成效果 3.IPEndPoint类 &#xff08;1&#xff09; 示例源码 &#xff0…

记录 | linux下互换键盘的Ctrl和CapsLock键

互换ctrl和CapsLK setxkbmap -option "ctrl:swapcaps"打开设置文件&#xff1a; sudo vim /etc/default/keyboard将其中的XKBOPTIONS中添加ctrl:swapcaps即可&#xff0c;如下所示&#xff1a; # KEYBOARD CONFIGURATION FILE# Consult the keyboard(5) manual pa…

【动态规划系列】子数组的最大和

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

自动化测试框架需要具备哪些功能?

我们经常听说使用了某某框架&#xff0c;那框架究竟是什么呢&#xff1f;框架有什么优势和功能&#xff1f; 什么是自动化框架 自动化框架是包含了自动化测试的组织、执行、监控以及报告等流程的工具&#xff0c;是由多个工具、库、模块和API等组成的工具集。自动化框架的目标…

线性代数入门与学习笔记

该内容为重拾部分线性代数知识的学习笔记&#xff0c;内容上更多的是为了解决问题而学习的内容&#xff0c;并非系统化的学习。 针对的问题为&#xff1a;Music算法推导求解过程中的矩阵计算知识。 学习的内容包括&#xff1a;矩阵原理、矩阵行列式、矩阵的秩、线性变换矩阵变换…

我的创作纪念日——多线程进阶分享

多线程-进阶 1. 锁的策略 1.1 乐观锁&悲观锁 乐观锁 预计在线程中数据大概率不会被其他线程拿去修改 对于加锁所作的准备较少。只有当修改的操作真正发生了&#xff0c;才会进行加锁操作 所以乐观锁适用于多读少写的情况&#xff0c;可以降低加锁频率&#xff0c;提升效…

C++初学教程四

一、程序设计 程序设计的三种基本结构:顺序、选择、循环 选择结构(也叫分支结构) :判断所指定的条件是否满足,决定从给定的两组或多组操作选择其中的一种。 计算机的判断是通过对表达式的计算来实现,也就是关系运算、逻辑运算。 用语句来体现就是if语句和switch语句。 一…

继承与派生(2)

1.派生类的权限&#xff1a;派生类的成员函数可以访问基类的public和protected类型的成员&#xff0c;而派生类的对象只能访问public类型的成员 2.创建顺序&#xff08;先创造后析构&#xff09;&#xff1a;基类函数&#xff0c;派生类函数&#xff0c;组合类函数 类的组合按…

每日一练 | 华为认证真题练习Day145

1、一台路由器通过RIP、OSPF和静态路由都学习到了到达同一目的地址的路由。默认情况下&#xff0c;VRP将最终选择通过哪种协议学习到的路由&#xff1f; A. 三种协议学习到的路由都选择 B. 静态路由 C. OSPF D. RIP 2、如果网络管理员没有配置骨干区域&#xff0c;则路由器…

VUE+THREE.JS 点击模型相机缓入查看模型相关信息

点击模型相机缓入查看模型相关信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直执行渲染4.点击事件4.1 初始化renderer时加入监听事件4.2 触发点击事件 5. 关键代码分析5.1 移除模型5.2 创建模型上方的弹框5.3 相机缓入动画5.4 动画执行 1.引入 引入模型所要呈现的3DSprite…

Dexie 查询sql速度优化

Dexie查询速度慢的原因主要一个优化点是复杂查询下的count执行。 以下摘自Dexie官方文档&#xff1a;https://dexie.org/docs/Collection/Collection.count() If executed on simple queries, the native IndexedDB ObjectStore count() method will be called (fast execution…

对标Gen-2!Meta发布新模型,进军文生视频赛道

随着扩散模型的飞速发展&#xff0c;诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢&#xff0c;因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…

Flink Window中典型的增量聚合(ReduceFunction / AggregateFunction)

一、什么是增量聚合函数 在Flink Window中定义了窗口分配器&#xff0c;我们只是知道了数据属于哪个窗口&#xff0c;可以将数据收集起来了&#xff1b;至于收集起来到底要做什么&#xff0c;其实还完全没有头绪&#xff0c;这也就是窗口函数所需要做的事情。所以在窗口分配器…

听GPT 讲Rust源代码--src/tools(9)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/apply_demorgan.rs 在Rust源代码中&#xff0c;apply_demorgan.rs文件位于rust-analyzer工具的ide-assists库中&#xff0c;其作用是实现一个辅助函数&#xff0c;用于在代码中应用De Morgan定律的变换。 …

Android : 篮球记分器app _简单应用

示例图&#xff1a; 1.导包 在build.gradle 中 加入 // 使用androidx版本库implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03 2. 开启dataBinding android{...// 步骤1.开启data bindingdataBinding {enabled true}...} 3.写个类继承 ViewModel pac…

整数与IP地址间的转换

原理&#xff1a;ip地址的每段可以看成是一个0-255的整数&#xff0c;把每段拆分成一个二进制形式组合起来&#xff0c;然后把这个二进制数转变成一个长整数。 举例&#xff1a;一个ip地址为10.0.3.193 每段数字相对应的二进制数 10 00001010 0 00000000 3 00000011 193 110000…

自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存储技术专家成长路线

数字化时代的到来带来了大规模数据的产生&#xff0c;各行各业都面临着数据爆炸的挑战。 随着云计算、物联网、人工智能等新兴技术的发展&#xff0c;对存储技术的需求也越来越多样化。不同应用场景对存储的容量、性能、可靠性和成本等方面都有不同的要求。具备存储技术知识和技…

机器学习-聚类问题

前言 聚类算法又叫做”无监督分类“&#xff0c;目标是通过对无标记训练样本来揭示数据的内在性质及 规律&#xff0c;为进一步的数据分析提供基础。 Kmeans 作为聚类算法的典型代表&#xff0c;Kmeans可以说是最简单的聚类算法&#xff0c;没有之一&#xff0c;那她是怎么完…

MySQL为何偏爱B+树索引

一、MySQL、B树概念 MySQL是一种关系型数据库&#xff0c;它使用SQL语言来操作数据。SQL语言可以实现对数据的增删改查等操作&#xff0c;但是如果数据量很大&#xff0c;那么这些操作的效率就会很低。为了提高效率&#xff0c;MySQL引入了索引的概念。 索引是一种数据结构&am…

人体关键点检测1:人体姿势估计数据集

人体关键点检测1&#xff1a;人体姿势估计数据集 目录 人体关键点检测1&#xff1a;人体姿势估计数据集 1.人体姿态估计 2.人体姿势估计数据集 &#xff08;1&#xff09;COCO数据集 &#xff08;2&#xff09;MPII数据集 &#xff08;3&#xff09;Human3.6M &#xf…