C语言静态链表
2022/2/26 6:25:14
本文主要是介绍C语言静态链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.什么是链表?
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。由前面的学习中已知:用数组存放数据时,必须事先定义固定的数组长度(即元素个数)。如果有的班级有 100 人,而有的班级只有 30 人,若用同一个数组先后存放不同班级的学生数据,则必顺定义长度为 100 的数组。如果事先难以确定一个班的最多人数,则必须把数组定得足够大,以便能存放任何班级的学生数据,显然这将会浪费内存。链表则没有这种缺点,它根据需要开辟内存单元。
链表有一个“头指针”变量,图中以 head 表示,它存放一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分;(1)用户需要用的实际数据;(2)下一个结点的地址。可以看出,head 指向第 1 个元素,第1个元素又指向第 2 .个元素……直到最后一个元素,该元素不再指向其他元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
可以看到链表中各元素在内存中的地址可以是不连续的。要找某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一个元素。如果不提供“头指针”(head),则整个链表都无法访问。链表如同一条铁链一样,一环扣一环,中间是不能断开的。
为了理解什么是链表,打一个通俗的比方:幼儿园的老师带领孩子出来散步,老师牵着第1个小孩的手,第 1 个小孩的另一只手牵着第 2 个孩子……这就是一个“链”,最后一个孩子有一只手空着,他是“链尾”。要找这个队伍,必须先找到老师,然后顺序找到每一个孩子。
显然,链表这种数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。前面介绍了结构体变量,用它去建立链表是最合适的。一个结构体变量包含若干成员,这些成员可以是数值类型,字符类型,数组类型,也可以是指针类型。用指针类型成员来存放下一个节点的地址。例如,可以设置这样一个结构体类型:
struct Student { int num; float score; struct Student *next; //next是指针变量,指向结构体变量 };
其中,成员num和score是用来存放用户需要的数据的,next是指针类型的成员,它既可以指向其他类型的结构体数据,也可以指向自己所在的结构体类型的数据。
注意:上面只是定义了一个结构体数据类型,并未实际分配存储空间,只有定义了变量才分配存储空间。
2.建立简单的静态链表
【例题】建立一个简单的链表,它由3个学生数据的结点组成,要求输出各组结点中的数据。
#include<stdio.h> #include<string.h> struct Student { int num; float score; struct Student *next; }; int main() { struct Student a,b,c,*head,*p; a.num=101; a.score=89.5; b.num=103; b.score=90; c.num=107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do{ printf("%1d %5.1f\n",p->num,p->score); p=p->next; }while(p!=NULL); return 0; }
这篇关于C语言静态链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享