C语言之链表增删查改

1.知识百科

  链表(Linked List)是计算机科学中一种基础的数据结构,通过节点(Node)的链式连接来存储数据。每个节点包含两部分:存储数据的元素和指向下一个节点的指针(单链表)或前后两个指针(双链表)。

  • 常见操作
      插入:在头部、尾部或指定位置插入节点。
      删除:删除指定节点(需处理指针指向)。
      遍历:从头节点依次访问每个节点。
      查找:按值或位置查找节点(需遍历)。

2.链表操作

2.1 创建链表

  创建一个链表,用于保存学生信息,分别存储姓名、学号和成绩。
在这里插入图片描述

typedef struct STU{char name[50];char id[20];float score;struct STU *next;
}STU_INFO,*P_STU; 

  添加节点,每一个节点保存一位学生信息。

/*录入信息*/
void STU_Input(P_STU node)
{printf("请输入姓名、学号、成绩:\n");scanf("%s%s%f",node->name,node->id,&node->score);while(getchar()!='\n');
}
/*
添加节点(尾插法)
*/
void STU_AddNode(P_STU *head)
{if(*head==NULL){*head=malloc(sizeof(STU_INFO));//创建链表头(*head)->next=NULL;STU_Input(*head);//录入成员信息return ;}//链表头已存在P_STU phead=*head;//偏移指针,将phead指向链表尾while(phead->next!=NULL){phead=phead->next;}//创建节点P_STU new_node=malloc(sizeof(STU_INFO));printf("添加节点:%p\n",new_node);phead->next=new_node;phead=phead->next;phead->next=NULL;//new_node->next=NULL;//录入信息STU_Input(new_node);//录入成员信息
}

2.2 遍历链表

  遍历链表,查看所有学生信息。

void STU_Output(P_STU head)
{P_STU phead=head;//指向链表头while(phead!=NULL){printf("姓名:%s  学号:%s  成绩:%.1f\n",phead->name,phead->id,phead->score);phead=phead->next;}
}

2.3 删除节点

  根据名字查找子节点,并删除。

  当删除的节点为中间节点,删除过程如下:
在这里插入图片描述
  当删除的节点为头节点,删除过程如下:
在这里插入图片描述
  节点删除代码实现如下,支持删除多个连续的重复节点。

//查找子节点进行删除
P_STU STU_FindNode_Del(P_STU head)
{//判断链表头是否为NULLP_STU phead=head;P_STU temp=head,temp2;char name[50];printf("请输入要查找的名字:\n");scanf("%s",name);while(getchar()!='\n');while(phead!=NULL){if(strcmp(phead->name,name)==0){//要删除的数据在链表头if(phead==head){temp=phead;phead=phead->next;free(temp);head=phead;}else{//要删除的数据不在链表头temp->next=phead->next;temp2=phead;phead=phead->next;free(temp2);//释放节点}}else //继续找下一个成员{temp=phead;phead=phead->next;//继续查找下一个成员}}return head;//返回链表头
}

  测试示例:

int main()
{P_STU head=NULL;//定义一个结构体指针int i=0;//添加节点while(1){STU_AddNode(&head);i++;if(i>=4)break;}printf("遍历链表\n");STU_Output(head);printf("删除节点\n");head=STU_FindNode_Del(head);printf("剩余成员信息\n");STU_Output(head);return 0;
}

  运行效果:

wbyq@wbyq-virtual-machine $ ./a.out 
请输入姓名、学号、成绩:
1 1 1
请输入姓名、学号、成绩:
2 2 2
请输入姓名、学号、成绩:
2 2 2
请输入姓名、学号、成绩:
3 3 3
遍历链表
姓名:1  学号:1  成绩:1.0
姓名:2  学号:2  成绩:2.0
姓名:2  学号:2  成绩:2.0
姓名:3  学号:3  成绩:3.0
删除节点
请输入要查找的名字:
2
剩余成员信息
姓名:1  学号:1  成绩:1.0
姓名:3  学号:3  成绩:3.0

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

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

相关文章

Windows环境下AnythingLLM安装与Ollama+DeepSeek集成指南

前面已经完成了Ollama的安装并下载了deepseek大模型包,下面介绍如何与anythingLLM 集成 Windows环境下AnythingLLM安装与OllamaDeepSeek集成指南 一、安装准备 1. 硬件要求 如上文说明 2. 前置条件 已安装Ollama并下载DeepSeek模型(如deepseek-r1:…

当贝AI知识库评测 AI如何让知识检索快人一步

近日,国内领先的人工智能服务商当贝AI正式推出“个人知识库”功能,这一创新性工具迅速引发行业关注。在信息爆炸的时代,如何高效管理个人知识资产、快速获取精准答案成为用户的核心需求。当贝AI通过将“闭卷考试”变为“开卷考试”的独特设计,为用户打造了一个高度个性化的智能…

HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】

鸿蒙客户端加载Web页面: 在鸿蒙原生应用中,我们需要使用前端页面做混合开发,方法之一是使用Web组件直接加载前端页面,其中WebView提供了一系列相关的方法适配鸿蒙原生与web之间的使用。 效果 web页面展示: Column()…

嵌入式开发场景中Shell脚本执行方式的对比

‌Shell脚本执行方式对比表‌ ‌执行方式‌‌命令示例‌‌是否需要执行权限‌‌是否启动子Shell‌‌环境变量影响范围‌‌适用场景‌‌嵌入式开发中的典型应用‌‌直接执行脚本‌./script.sh是是子Shell内有效独立运行的脚本,需固定环境自动化构建脚本(…

MES系统需要采集的数据及如何采集

​数据采集在企业信息化建设中占据着举足轻重的地位,是实现物料跟踪、生产计划制定、产品历史记录维护以及其他生产管理活动的基石。数据的准确性和实时性直接关系到企业信息化能否成功落地,是企业迈向高效生产的关键因素。 数据收集对于MES制造执行系统…

闭环管理:借助数字化管理平台实现客户反馈的价值升级

在竞争激烈的市场环境中,客户反馈已成为企业优化服务、提升竞争力的核心资源。如何高效处理客户反馈,将其转化为企业持续改进的动力,是每个企业面临的重要课题。作为服务管理数字化转型服务商,瑞云服务云为大中型企业提供了一套完…

C++Primer学习(13.6 对象移动)

13.6 对象移动 新标准的一个最主要的特性是可以移动而非拷贝对象的能力。如我们在13.1.1节(第440页)中所见,很多情况下都会发生对象拷贝。在其中某些情况下,对象拷贝后就立即被销毁了。在这些情况下,移动而非拷贝对象会大幅度提升性能。 如我…

Uni-app页面信息与元素影响解析

获取窗口信息uni.getWindowInfo {pixelRatio: 3safeArea:{bottom: 778height: 731left: 0right: 375top: 47width: 375}safeAreaInsets: {top: 47, left: 0, right: 0, bottom: 34},screenHeight: 812,screenTop: 0,screenWidth: 375,statusBarHeight: 47,windowBottom: 0,win…

大模型 API 调用中的流式输出与非流式输出全面对比:原理、场景与最佳实践

流式输出与非流式输出应用场景 流式输出的理想应用场景 实时对话系统聊天机器人和虚拟助手客服系统和用户支持平台实时问答和教育辅导应用 渐进式内容生成代码补全和编程辅助工具(如 GitHub Copilot)实时文档协作和编辑系统创意写作和内容创作平台 用户…

Problem A: 计算奇数和

补充(牢骚): 必须要 Main 类,自己自定义的类不能跑,说实话我被恶心到了,真没力扣好用。后面都默认为Main 类。真恶心,其实不止这一点。。。 1.题目问题 2.输入 3.输出 4.样例 5.代码实现 imp…

深度赋能!北京智和信通融合DeepSeek,解锁智能运维无限可能

在数字化飞速发展的今天,传统运维模式面临着设备规模激增、故障复杂度攀升、人工响应滞后等多重挑战。随着DeepSeek、腾讯元宝等AI大模型的兴起,为传统运维模式带来了新的变革。 北京智和信通基于DeepSeek大模型技术,将AI和运维场景深度融合&…

2024年第五届MathorCup数学应用挑战赛大数据竞赛复赛论文

2024年第五届MathorCup数学应用挑战赛——大数据竞赛 复赛(二等奖)论文 本人亲自与队友完成的论文,进入复赛但由于和亚太时间冲突,身体很累最后放弃了复赛并没有参赛…最后获二等奖; 虽然如果参加的话一等奖问题应该不大,但是分配…

性能测试~

1.什么是性能测试 1.什么是性能 就像这两个车一样,虽然都是代步工具,构造都是一样的,但是路虎的发动机要比捷达好.路虎的百米加速却是比捷达快的,我们就知道路虎的性能要比捷达好 . 那么什么是软件的性能呢?我们分析一下 2.常见的性能测试指标 2.1并发数 并发数是指在同一…

【极速版 -- 大模型入门到进阶】LORA:大模型轻量级微调

文章目录 🌊 有没有低成本的方法微调大模型?🌊 LoRA 的核心思想🌊 LoRA 的初始化和 r r r 的值设定🌊 LoRA 实战:LoraConfig参数详解 论文指路:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE M…

【论文分析】无人机轨迹规划,Fast-Planner:实时避障+全局最优的路径引导优化算法

这篇论文《Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths》由香港科技大学提出,主要针对无人机(UAV)在复杂环境中的实时轨迹重新规划问题,提出了一种结合梯度优化和拓扑路径搜…

禅道品牌全面战略升级:开创项目管理国产化替代新格局

2025年,禅道软件完成企业品牌战略深度升级。此次升级,从产品力、服务力到生态圈构建等方面进行了全面优化,以更智慧的解决方案、更开放的生态布局,更安全的国产化解决方案,助力企业实现从“工具应用”到“价值创造”的…

PyTorch处理数据--Dataset和DataLoader

在 PyTorch 中,Dataset 和 DataLoader 是处理数据的核心工具。它们的作用是将数据高效地加载到模型中,支持批量处理、多线程加速和数据增强等功能。 一、Dataset:数据集的抽象‌ Dataset 是一个抽象类,用于表示数据集的接口。你…

Android 蓝牙/Wi-Fi通信协议之:经典蓝牙(BT 2.1/3.0+)介绍

在 Android 开发中,经典蓝牙(BT 2.1/3.0)支持多种协议,其中 RFCOMM/SPP(串口通信)、A2DP(音频流传输)和 HFP(免提通话)是最常用的。以下是它们在 Android 中的…

R002-云计算

1 概念 英文名:Cloud Computing 核心:云计算的核心概念就是以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心 2.分类 基础设施即服务(IaaS)它向…

降维(DimensionalityReduction)基础知识2

文章目录 五、基于局部结构保持的降维1、Laplacian Eigenmaps(拉普拉斯特征映射)(1)邻接矩阵(2)图论基础(3)Laplace算子1、散度(Divergence)2、拉普拉斯算子3…