当前位置: 首页 > news >正文

第五十七天学习记录:C语言进阶:结构体链表的自学

先展示一段代码:

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <stdlib.h>// 定义链表节点结构体
typedef struct Node {int value;struct Node* next;
} Node;int main() {// 创建链表头指针Node* head = (Node*)malloc(sizeof(Node));head->value = 1;head->next = NULL;// 向链表中插入新节点Node* current = head;current->next = (Node*)malloc(sizeof(Node));current->next->value = 2;current->next->next = NULL;current = current->next;current->next = (Node*)malloc(sizeof(Node));current->next->value = 3;current->next->next = NULL;// 遍历打印链表current = head;while (current != NULL) {printf("%d ", current->value);current = current->next;}printf("\n");// 释放链表内存(注意要从头节点开始逐个删除)current = head;while (current != NULL) {Node* next = current->next;free(current);current = next;}return 0;
}

在上面的示例中,我们先定义了一个名为Node的结构体来表示链表的每个节点,包括一个整型value和一个指向下一个节点的指针next。接着创建了链表头节点head,并通过修改指针的方式添加了两个新节点。

遍历链表时,同样需要使用一个指针从头节点开始不断沿着链表向后移动,直到遇到一个空指针为止。在删除链表时,同样要记得从头节点开始逐个删除每个节点,并且释放其所占用的内存。

需要注意的是,在C语言中需要手动分配和释放内存,务必确保内存分配和释放的正确性。此外,这只是链式结构使用的一种最基本的示例,在实际应用中还需要考虑和处理其他的情况。

通常情况下,头指针本身不保存任何结构体信息,它只是指向链表中的第一个结点。链表中的每个结点才保存了结构体的具体信息。在遍历链表时,可以使用头指针来获取链表中的第一个结点,然后逐个访问剩余结点。在添加新结构体时,可以使用头指针指向的结点作为链表的起点,并利用指针在其后面追加新的结点,以形成新的链表。因此,头指针对于链式结构的管理是非常重要的。

下面再引用CSDN论坛C语言技能树中的一道题的正确答案,个人觉得这道题也很经典:

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <stdlib.h>typedef struct Student
{char *name;int id;unsigned int age;char group;float score;struct Student *next;
} Student, *M_Class;M_Class init_class()
{M_Class head;head = (Student *)malloc(sizeof(Student));if (!head)return NULL;head->next = NULL;return head;
}void insert_student(M_Class cls, char *name, int id, unsigned int age, char group, float score)
{M_Class p;p = (Student *)malloc(sizeof(Student));p->name = name, p->id = id, p->age = age, p->group = group, p->score = score;p->next = cls->next;cls->next = p;
}void print_class(const M_Class cls)
{M_Class prt = NULL;float total = 0, average = 0;int num_stu = 0;printf("=============== 学生基本信息 ===============\n");printf("姓名\t学号\t年龄\t小组\t成绩\n");printf("--------------------------------------------\n");for (prt = cls->next; prt; prt = prt->next){printf("%s\t%d\t%d\t%c\t%.2f\n",prt->name, prt->id, prt->age, prt->group, prt->score);total += prt->score;++num_stu;}printf("============================================\n");average = total / num_stu;printf("班级平均成绩:%.2f", average);
}int main(int argc, char** argv)
{M_Class cls = init_class();insert_student(cls, "王五", 1003, 16, 'B', 80.50);insert_student(cls, "李四", 1002, 15, 'A', 90.00);insert_student(cls, "张三", 1001, 16, 'A', 95.50);print_class(cls);return 0;
}

这是一个链表程序并使用了 Student 结构体来存储学生的基本信息,其中 next 指针用于连接链表中的各个结点。 M_Class 实际上是 Student* 的别名,它用于声明指向 Student 的指针。

main 函数中,首先使用 init_class 函数来初始化班级链表,然后使用 insert_student 函数向链表中添加新学生。最后使用 print_class 函数打印班级信息,包括学生姓名、学号、年龄、小组和成绩等。

这个程序的输出是:

=============== 学生基本信息 ===============
姓名	学号	年龄	小组	成绩
--------------------------------------------
张三	1001	16	A	95.50
李四	1002	15	A	90.00
王五	1003	16	B	80.50
============================================
班级平均成绩:88.00

从输出结果可以看出,链表中的学生信息被顺序地输出出来了,并且计算了班级平均成绩。

问:
结构体链表算是C语言的内容还是数据结构的内容?
ChatAI答:
结构体链表是数据结构的一种,它是由 struct 标签/结构体作为结点的基本单位组成的一个链式数据结构。每个结点包含结构体中定义的变量以及一个指向下一个结点的指针。结构体链表可以用来表示许多不同的复杂数据结构,例如链表、树、图等。

在 C 语言中,结构体链表通常使用指针来进行创建、操作和使用,因此涉及指针相关的操作。这也使得结构体链表的实现更加灵活,因为它可以动态分配内存来适应不同的需求。由于 C 语言专注于程序的底层细节,因此它非常适合用来实现数据结构,包括结构体链表。因此,结构体链表既是 C 语言中的一种内容,又是数据结构的内容。

相关文章:

第五十七天学习记录:C语言进阶:结构体链表的自学

先展示一段代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 typedef struct Node {int value;struct Node* next; } Node;int main() {// 创建链表头指针Node* head (Node*)malloc(sizeof(Node…...

【一次调频】考虑储能电池参与一次调频技术经济模型的容量配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

ICV报告: 智能座舱SoC全球市场规模预计2025年突破50亿美元

在智能化、互联化车辆需求不断增加的推动下&#xff0c;汽车行业正在经历一场范式转变。这一转变的前沿之一是智能座舱SoC。本市场研究报告对智能座舱SoC市场进行了全面的分析&#xff0c;包括其应用领域、当前状况和主要行业参与者。 智能座舱SoC指的是现代汽车智能座舱系统的…...

在can协议的基础下编写DBC文件,然后使用该DBC文件下发can协议到底盘完整流程

目录 前言一、VectorCANdb下载及安装二、DBC文件的编写1.新建dbc文件2.建立dbc2.1根据CAN协议设置以下的signals2.2设置报文2.3建立报文与信号的关系2.4建立节点 三、编写程序使用UDP通信下发can协议1.查看can口、电脑ip以及端口号2.编写测试程序 前言 最近完成了一个项目&…...

工业传感器有哪些?

工业传感器是指能在工业制造过程能将感受的力、热、光、磁、声、湿、电、环境等被测量转换成电信号输出的器件与装置&#xff0c;在各种化工、机械、汽车等工业场景上都有应用。 工业传感器有哪些&#xff1f; 工业传感器由于不同的特性也被分为多种不同的类别&#xff0c;主要…...

Docker应用部署之Nginx

部署nginx 要求&#xff1a;在docker容器中部署nginx&#xff0c;并通过外部机器访问nginx 步骤&#xff1a; 1.搜索nginx镜像 docker search nginx 2.拉取nginx镜像 docker pull nginx 3.创建容器 #在root目录下创建nginx目录用于存放nginx项目 mkdir ~/nginx cd ~/ng…...

TerminalWorks TSPrint/TSScan/TSWebCam Crack

/ 远程桌面打印软件&#xff0c;TerminalWorks TSPrint Server/Client 从远程服务器打印到本地打印机的 简单方法 TSPrint 为您提供了一个简单的远程桌面打印软件&#xff0c;以及使 Windows 终端服务操作更容易的附加工具。有选择地启用或禁用功能&#xff0c;以便您可以完全…...

如何使用Springboot实现文件上传和下载,并为其添加实时进度条的功能

文件上传和下载是Web开发中非常基础的功能&#xff0c;但在实际开发中&#xff0c;我们经常需要实时显示文件上传或下载的进度。这篇文章将介绍如何使用Springboot实现文件上传和下载&#xff0c;并为其添加实时进度条的功能。 文件上传 添加Maven依赖项 首先&#xff0c;我…...

安装并新建windows下wxwroks7.0 bootrom工程

双击steup.exe 直接next 直接next 选择typical&#xff0c;然后next I accept 安装完成finish 现在双击Workbench 4&#xff0c;新建vxworks7.0工程&#xff0c;会出现下面的情况&#xff0c;因为没有licence 安装licence&#xff0c;将zwrsLicense-vx7-perm.lic粘贴到安装目…...

element-ui表格el-table的使用

先给大家展示一下效果 Table 属性 属性名说明类型可选值默认值data显示的数据array——heightTable 的高度&#xff0c; 默认为自动高度。 如果 height 为 number 类型&#xff0c;单位 px&#xff1b;如果 height 为 string 类型&#xff0c;则这个高度会设置为 Table 的 sty…...

Backtrader官方中文文档:第八章Indicators指标

本文档参考backtrader官方文档,是官方文档的完整中文翻译,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 Indicators指标章节目录 指标(Indicator)指标的使用__init__ 对比 next指标在`__init__`阶段的执行过程指标在…...

CAP原则

CAP原则又称CAP定理&#xff0c;指的是在一个分布式系统中&#xff0c;存在Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;三者不可同时保证&#xff0c;最多只…...

【PowerQuery】M语言的使用产品和使用场景

当然PowerQuery的M语言应用场景不只是引用在PowerBI和Excel中,它具有广泛的应用场景。目前我们可以在以下产品的使用场景中应用到M语言。 Excel PowerQuery应用Excel通过M语言可以实现整体数据的清洗和重构。  PowerBI 的PowerQuery应用 PowerBI也是通过M语言来实现数据…...

【Linux】遇事不决,可先点灯,LED驱动的进化之路---1

【Linux】遇事不决&#xff0c;可先点灯&#xff0c;LED驱动的进化之路---1 前言&#xff1a; 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序&#xff08;led_drive_simple.c&#xff09; 1.2.2 应用程序&#xff08;led_test_simple.c…...

hive任务reduce步骤卡在99%原因及解决

我们在写sql的时候经常发现读取数据不多&#xff0c;但是代码运行时间异常长的情况&#xff0c;这通常是发生了数据倾斜现象。数据倾斜现象本质上是因为数据中的key分布不均匀&#xff0c;大量的数据集中到了一台或者几台机器上计算&#xff0c;这些数据的计算速度远远低于平均…...

C++11 -- lambda表达式

文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…...

【开源项目】银行查询服务的设计和实现

银行查询服务的设计和实现 项目地址github&#xff1a;https://github.com/xl-echo/bankInquiryService项目地址gitee&#xff1a;https://gitee.com/xl-echo/bank-inquiry-service 银行查询服务的设计初衷是&#xff1a;为提供更加便利的查询服务&#xff0c;我们在分布式系…...

Linux服务器禁止密码登录,设置秘钥登录

生成SSH密钥 (客户机端) 执行ssh-keygen -t rsa命令创建RSA密钥对&#xff0c;执行结果如下(键入3次回车)&#xff1a; [rootnode01 .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): [回车] En…...

第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值

文章目录 第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值典型的回调方法典型的辅助方法 第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值典型的回调方法典型的辅助方法 第十八章 开发Productions - Object…...

【云原生|Kubernetes】07-Pod健康检查和服务可用性检查

【云原生|Kubernetes】07-Pod健康检查和服务可用性检查 文章目录 【云原生|Kubernetes】07-Pod健康检查和服务可用性检查前言Pod探针Liveness(Pod存活探针)Readiness(Pod服务就绪探针)Startup(启动探针) 定义Liveness存活探针EXec探针HTTP探针TCP探针gRPC探针使用命名端口 定义…...

Wan2.2-I2V-A14B部署教程:混合云架构下边缘节点视频生成能力下沉

Wan2.2-I2V-A14B部署教程&#xff1a;混合云架构下边缘节点视频生成能力下沉 1. 镜像概述与核心价值 Wan2.2-I2V-A14B私有部署镜像是一款专为文生视频场景优化的解决方案&#xff0c;特别适合需要在边缘节点部署视频生成能力的企业用户。这个镜像最大的特点是"开箱即用&…...

学历作为硬实力:当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制

学历作为硬实力&#xff1a;当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制 作者&#xff1a;培风图南以星河揽胜 专栏链接&#xff1a;澄心观道 字数&#xff1a;约 14,200 字 | 阅读时长&#xff1a;约 52 分钟 引言&#xff1a;一个被广泛观察却少有深究的社会…...

AI在测试中的应用:从测试用例生成到缺陷预测

随着软件开发流程向敏捷与DevOps的持续演进&#xff0c;软件测试面临着迭代周期缩短、系统复杂度飙升的双重压力。传统的测试方法&#xff0c;高度依赖人工经验与重复劳动&#xff0c;在效率、覆盖率和预测性上逐渐显现瓶颈。人工智能技术的引入&#xff0c;正从辅助工具演变为…...

RMBG-2.0镜像免配置部署:无需配置Python环境,开箱即用Web交互界面

RMBG-2.0镜像免配置部署&#xff1a;无需配置Python环境&#xff0c;开箱即用Web交互界面 你是不是也遇到过这样的烦恼&#xff1f;想用AI模型给图片换个背景&#xff0c;结果光是安装Python环境、配置依赖库就折腾了大半天&#xff0c;最后还可能因为版本冲突、CUDA不兼容等问…...

硅橡胶资源平台对接的靠谱对接企业哪家强

在深圳这座创新与制造之都&#xff0c;硅橡胶产业上下游企业林立&#xff0c;从原材料、模具设计到制品生产&#xff0c;形成了一个庞大而复杂的产业链。对于许多企业而言&#xff0c;“深圳硅橡胶资源平台对接” 的需求日益迫切——无论是寻找稳定供应商、开拓新客户&#xff…...

IT行业的项目经理考不考PMP证书?我劝你看完这篇在决定!

作为在 IT 圈摸爬滚打 8 年&#xff0c;从后端开发一路转型项目经理、带过 10 大小项目的老学长&#xff0c;最近总被身边技术小伙伴追问&#xff1a;想转 PM&#xff0c;必须考 PMP 吗&#xff1f;没证书就做不好项目管理吗&#xff1f;今天就用过来人的经验&#xff0c;跟大…...

PyAutoGUI实战:给你的旧软件做个‘外挂’,自动完成游戏日常或软件测试

PyAutoGUI实战&#xff1a;用Python打造智能自动化助手&#xff0c;解放双手提升效率 在数字时代&#xff0c;重复性任务如同无形的枷锁&#xff0c;消耗着我们的时间和精力。想象一下&#xff0c;每天打开电脑后&#xff0c;你需要重复点击十几个相同的按钮&#xff0c;填写相…...

TP4056充电板实战避坑指南:从LED状态误判到TEMP脚悬空,新手最容易踩的5个坑

TP4056充电板实战避坑指南&#xff1a;从LED状态误判到TEMP脚悬空&#xff0c;新手最容易踩的5个坑 第一次使用TP4056充电板时&#xff0c;我盯着闪烁的LED灯陷入了困惑——为什么充满电后红灯还亮着&#xff1f;为什么电池发热异常&#xff1f;这些问题让我意识到&#xff0c;…...

QtScrcpy全场景投屏效率指南:跨设备协作与多终端控制解决方案

QtScrcpy全场景投屏效率指南&#xff1a;跨设备协作与多终端控制解决方案 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/Qt…...

Qwen-Edit-2509多角度切换技术:如何用单张图片生成全视角内容?

Qwen-Edit-2509多角度切换技术&#xff1a;如何用单张图片生成全视角内容&#xff1f; 【免费下载链接】Qwen-Edit-2509-Multiple-angles 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Qwen-Edit-2509-Multiple-angles 在视觉创作领域&#xff0c;你是否曾为拍…...