C语言实现动态链表的建立

上期讲解了静态链表的实例,但是静态链表建立的节点数量有限,毕竟是手工建立,难免也会出问题, 所以这期讲讲怎么使用动态的方式建立链表,也就是 动态链表 !
关键词:动态链表;
01建立链表
1.1、建立动态链表建立链表所需要的头文件,代母如下:
#include//标准输入输出头文件
#include//包含了c、c++语言的最常用的系统函数
#include//动态存储分配函数头文件
需要使用宏定义定义相关变量,代码如下:
#define len sizeof(struct student)//宏定义节点长度得命名
#define type struct student //宏定义结构体变量命名
需创建一个结构体,代码如下:
struct student //定义一个学生类型结构体,包括学号,分数
{
long num;
float score;
struct student* next; //next是指针变量,指向结构体变量
};//指向结构体对象得指针变量既可以指向结构体变量,也可以指向结构体数组中得元素
建立链表函数,代码如下:
type* creat(void) //定义函数,此函数返回一个指向链表头的指针
{
type* head; //定义头指针
type* p1,*p2; //定义两个 指针变量用来相互保存
number = 0; //开始时,结点清零
p1 = p2 = (type*)malloc(len); //创建存储空间
printf(请按格式输入学生学号,分数\\n); //输出提示信息
printf(例如101,1 并以0,0结束\\n);
scanf(%ld,%f, &p1->num, &p1->score);//按格式输入第一个结点的信息
head = null; //第一个结点头指针赋空值
while (p1->num!=0) //循环直到输入学生学号为0,就结束
{
number++; //结点自增
if (number == 1) //如果只有一个结点,那么头指针指向第一个输入的结点
head = p1;
else
p2->next = p1;//如果大于1个,那么要用next保存前一个结点的信息
p2 = p1; //保存前一个结点信息
p1 = (type*)malloc(len);//开辟新的结点
scanf(%ld,%f, &p1->num, &p1->score);//输入下一个结点信息
}
p2->next = null; //循环结束,将指向信息赋空值
return (head); //返回首地址
}
需编写主函数,代码如下:
int main()
{
type* pt; //定义一个结构体指针变量
pt = creat(); //函数返回链表第一个结点的地址
printf(\\nnum:%ld\\nscore:%5.lf\\n, pt->num,pt->score);
//输出第一个结点的成员值
return 0;
}
运行程序,最终结果显示如图1-1所示:
图1-1 运行结果界面
图1-1中首先按给定的提示方法,输入信息,并以0,0结束输入,最终通过打印的方式显示输出第一个节点的信息!
文中最后结果显示的是第一个结点的内容,作为有强大功能的链表,对他的操作当然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等!
02建立链表
2.1、链表的输出链表的的输出可以使用循环打印就可以输出整个链表的数据,输出函数的代码如下:
void print(type * head)
{
type * p; //定义指针
printf(\\nnow these %d records are:\\n);//输出显示信息
p = head; //使p指向第一个结点
if(head!=null) //输出第一个结点后的信息
do {
printf(%ld %5.1f\\n,p->num,p->score);
p = p->next; //指向下个结点
} while (p != null);
}
主函数的代码如下:
int main()
{
type * pt; //定义一个结构体指针变量
pt = creat(); //函数返回链表第一个结点的地址
print(pt); //输出调用
return 0;
}
链表的修改、删除、插入有点理解费劲,所以留给下期讲解,要弄懂链表还是推荐边写边看,下期讲解链表的修改、删除、插入!

如何使用TOF 3D超感应技术来实现人脸识别支付的详细资料概述
基于OpenCV的网络实时视频流传输教程
瑞萨电子推出具备蓝牙功能的RX23W模块,适用于物联网设备的系统控制与无线通信
迈步助行机器人入选工信部《2023年老年用品产品推广目录》
Altera Stratix V FPGA实现业界第一款单芯片双路100G转发器
C语言实现动态链表的建立
专家探讨明年全球及中国LED产业发展趋势
大型空间空气改善兴起,智能雾化/感知成为防疫机器人突围武器
Nordic半导体宣布加入CSA连接标准联盟
东软T-BOX开启汽车智能互联全新时代
电脑开机启动时提示(显示)NTLDR文件丢失解决办法及原因分
36氪WISE2022 | 聚势湾区产业生态 芯海科技赋能AIoT智慧发展
Kubernetes是什么,一文了解Kubernetes
余压传感器最重要的两个功能
欧洲发射四颗欧洲伽利略全球导航卫星 距全球定位系统更近一步
中国移动2020年首三季度财报已发布
江西移动的客户规模已经超3000万移动无线网络已达100%行政村覆盖
捷报 | 翱捷科技5G芯片平台实现首秀,完成R17 RedCap关键技术验证
电信系统中心机房防雷的措施和保护处理方案
国外将研发下一代锂金属电池 更持久充电速度更快以及更安全