C语言如何创建⼀个动态链表?

一、问题

        创建动态链表就是指在程序执⾏过程中,从⽆到有,按照需求开辟结点和输⼊各结点数据,并建⽴起前后相连接的关系。那么,如何创建动态链表呢?

二、解答

        以建⽴⼀个有任意名学⽣数据的单向动态链表为例,可以根据需要,动态地为学⽣分配内存,直到输⼊学号为 0 ,则结束输⼊,不再创建,然后将动态创建的学⽣信息输出。 创建⼀个动态链表函数的相应代码如下。

stu *creat(void)
{stu *head, *p1, *p2;n = 0;p1 = p2 = (stu *)malloc(LEN);scanf("%d,%d,%f", &p1->num, &p1->age, &p1->score);head = NULL;while (p1->num != 0){n = n + 1;if (n == 1){head = p1;}else{p2->next = p1;}p2 = p1;p1 = (stu *)malloc(LEN);scanf("%d,%d,%f", &p1->num, &p1->age, &p1->score);}p2->next = NULL;return head;
}

        在创建函数中,若输⼊学号为 0 ,则说明链表建⽴完成。建⽴链表之前,⾸先使 head 指向⼀个空指针,表⽰此时的链表⽆结点,当建⽴了第⼀个结点后,就令 head 指向该结点。

        实现创建链表的过程如下:

(1)在为 p1 和 p2 开辟了内存空间后,从键盘输⼊⼀个学⽣的数据信息给 p1 所指的第⼀个结点。若学号不为0,则这输⼊的是第⼀个数据,即 n=1,那么令 head 指向该结点, 即 head=p1,把 p1 的值赋给 head,如图所示。

(2)建⽴完第⼀个结点后,再开辟⼀个结点并使 p1指向该结点。向结点中输⼊数据, 如果第⼆个结点的学号不为 0 ,此时 n=2,则第⼆个结点就是第⼀个结点的直接后继。使 p2 的指针域指向第⼆个结点,建⽴联系,此时链表的形式如图所示。

(3)第⼆个结点建⽴后,使 p2 指向新建⽴的第⼆个结点,⽅便 pl 再去开辟新的内存,建⽴下⼀个结点。建⽴下⼀个结点的⽅法同(2),第三个结点的建⽴如下图所示。

(4)下⼀个结点的建⽴⽅法同(2),直到键盘输⼊学号为 0,则链表建⽴结束,学号为 0 这个结点不连接到链表中。

        创建动态链表结束后,就可以在主函数中调⽤创建函数。该创建函数⽆传递参数,返回值为头指针。创建链表结束后,输出学⽣数据,运⾏结果如图所示。

101,18,90,0
102,20,89,3
103,19,88,3
0
101,18,90.000000
102,20,89,300003
103,19,88.300003

三、总结

        在创建动态链表的函数中,需要注意在开辟完⼀个结点后,需要先向结点中输⼊数据, 再将前⼀个结点与后⼀个结点建⽴联系,即前⼀个结点的指针域指向后⼀个结点,这样才能将开辟的结点建⽴链式结构。

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

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

相关文章

使用mysql主从热备+keepalived服务+ipvsadm工具 实现 mysql高可用主备+负载均衡

目录 1、工作原理 2、环境准备 3、分别在主服务器和备用服务器上安装keepalived和ipvsadm 4、修改keepalived服务的配置文件 4.1 修改主服务器上的keepalive服务的配置文件 4.2 修改备用服务器上的keepalive服务配置文件 5、编写mysql监控脚本放到主服务器上 6、在主服…

echers配置项:X轴,Y轴颜色修改

如上图绿框所示,修改x,y轴的颜色 let option {xAxis: {axisLine:{lineStyle:{color:red}},},yAxis: {type: value,axisLine:{lineStyle:{color:red}},}, }

学习MySQL(六):Python的连接与操作

安装第三方模块pymysql pip install pymysql 或者 通过PyCharm后台操作 连接mysql # 语法示例 import pymysql db pymysql.connect(hostlocalhost,userroot,password"123456",databaseschool,port3306,charset"utf8") 数据操作的基本语法 import pymys…

通过gen_compile_commands.py产生compile_commands.json文件的方法

大家在使用vscode查看linux源代码时,会有很多飘红处,而且函数的跳转非常不方便。所以linux给了一个脚本gen_compile_commands.py,此脚本类似ctags这样,产生相应的关联之类的数据库,方便函数及文件的跳转等等。非常好。…

软件测试委托合同(Word原件实际参考)

一、 任务表述 二、双方的主要义务 三、履约地点 四、合同价款 五、测试费用支付方式 六、履行的期限 七、资料的保密 八、 风险责任的承担 九、验收方法 十、 争议解决 十一、 其他 十二、签章 十三、计算机软件产品鉴定测试保密协议 软件资料清单列表部分文档: …

Object.wait()和LockSupport.park()

Object.wait() 和 LockSupport.park() 都是用来使当前线程等待的方法,但它们在使用场景和机制上有所不同: Object.wait() 用途:wait() 方法属于对象监视器(Monitor)的一部分,通常与 synchronized 块或方法…

电感式传感器

电感传感器是基于电磁感应原理,将被测非电量(如位移、压力、振动等)转换为电感量变化的一种结构性传感器。利用自感原理的有自感式传感器(可变磁阻式),利用互感原理的有互感式(差动变压器式和涡…

AI学习指南线性代数篇-矩阵的运算

AI学习指南线性代数篇-矩阵的运算 线性代数中,矩阵的运算是一项重要而基础的内容。在人工智能领域,矩阵的运算被广泛应用于各种算法中,如神经网络、图像处理、自然语言处理等。本文将从矩阵的运算概述、在AI中的使用场景、定义和意义以及公式…

QT:QML制作线形图

目录 一.介绍 二.引入库 三.自定义属性 四.悬停处理函数 五.设置X轴 六.设置Y轴 七.画线 八.测试点坐标 九.设置值 十.效果演示 十一.代码演示 1.LineGraph.qml 2.main.qml 一.介绍 线形图(也称为折线图)是一种常用的数据可视化工具&#…

如何找到MySQL中存储引擎所对应的表空间并且打开?

在上节课我们学习了数据库(MySQL)进阶:存储引擎,有不少同学产生疑惑,到底要怎么找到表空间并且打开啊?这节课我们就来探讨。 首先,根据这个路径:C:\ProgramData\MySQL\MySQL Server…

mybatis-plus如何使用QueryWrapper和LambdaQueryWrapper的and方法?

构造器去构造条件的时候,我们都知道eq方法去链式的时候是自动添加and的,那如果需要and的那个条件需要加括号呢? 环境 Jdk 1.8、mybatis-plus 3.5.3.2、mysql 5.7.11 示例 sql: select * from user where openid 1 and (phon…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目,用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2],漏洞在2020年于此 代码合…

通信网络时钟同步(PTP网络授时服务器)技术探讨

通信网络时钟同步(NTP网络授时服务器)技术探讨 通信网络时钟同步(NTP网络授时服务器)技术探讨 1、着移动通信业务的发展和移动用户的快速增长, 移动网络架构向IP化、宽带化进展。为了适应业务IP化发展趋势&#xff0c…

02 VUE学习:模板语法

模板语法 Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。 在底层机制中,Vue 会将模板编译成高度优化的…

开发vue3,真的可以不用ref/reactive了,也不需要ref.value

什么是Cabloy-Front? Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架。不用ref/reactive,不用ref.value,不用pinia 与UI库的配合 Cabloy-Front 可以搭配任何 UI 库使用,并且内置了几款 UI 库的项目模版,便于开箱即用…

免费SSL证书签发安装指南

一、签发 1.选择证书颁发机构(CA):首先,你需要找到一个提供免费SSL证书的CA。有些CA会提供永久免费的SSL证书,而有些则可能只提供有限时间的试用证书,如JoySSL就提供永久免费证书。 2.生成CSR&#xff08…

WPF 鼠标拖拽平移

效果 xaml <ScrollViewer x:Name"scrollViewer" HorizontalScrollBarVisibility"Hidden" VerticalScrollBarVisibility"Disabled" Background"#FFF1ADAD"PreviewMouseDown"ScrollViewer_OnPreviewMouseDown"PreviewMou…

Electron学习笔记(一)

文章目录 相关笔记笔记说明 一、轻松入门 1、搭建开发环境2、创建窗口界面3、调试主进程 二、主进程和渲染进程1、进程互访2、渲染进程访问主进程类型3、渲染进程访问主进程自定义内容4、渲染进程向主进程发送消息5、主进程向渲染进程发送消息6、多个窗口的渲染进程接收主进程发…

白鲸开源CEO郭炜在2024 DataOps发展大会上获聘专家

2024年5月15日&#xff0c;白鲸开源CEO郭炜在2024 DataOps发展大会上被正式聘任为DataOps专家&#xff0c;并获得了荣誉证书。本次大会由中国通信标准化协会主办&#xff0c;中关村科学城管委会提供支持&#xff0c;大数据技术标准推进委员会&#xff08;CCSATC601&#xff09;…

iisnginx环境一次奇怪的跨域问题解决经过

跨域问题描述&#xff1a; iis网站跨域、nginx 网站跨域 都已配置&#xff0c;访问接口依然出现跨域问题。 错误提示&#xff1a; ccess to XMLHttpRequest at ‘https://xxx.com/gameapi/preserve/get/status’ from origin ‘https://cdn.xxx.com’ has been blocked by CO…