前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言链表实例--玩转链表

C语言链表实例--玩转链表

作者头像
用户6754675
修改于 2020-10-20 02:59:02
修改于 2020-10-20 02:59:02
2.1K00
代码可运行
举报
文章被收录于专栏:嵌入式单片机嵌入式单片机
运行总次数:0
代码可运行

下图为最一简单链表的示意图:

第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩 score 等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。

指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。

在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为 0。这样一种连接方式,在数据结构中称为“链表”。

而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现

例如:每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。

一个存放学生学号和成绩的结点应为以下结构:

struct stu

{ int num;

int score;

struct stu *next;

}

前两个成员项组成数据域,后一个成员项 next 构成指针域,它是一个指向 stu 类型结构

的指针变量。

链表的基本操作对链表的主要操作有以下几种:

1. 建立链表;

2. 结构的查找与输出;

3. 插入一个结点;

4. 删除一个结点;

建立一个三个结点的链表,存放学生数据。为简单起见, 我们假定学生数据结

构中只有学号和年龄两项。可编写一个建立链表的函数 creat。程序如下:

#define NULL 0

#define TYPE struct stu

#define LEN sizeof (struct stu)

struct stu //定义结点结构

{

int num;

int age;

struct stu *next;//指针域,用来存放下一个结点的地址

};

TYPE *creat(int n)//n代表创建n个结点链表

{

struct stu *head,*pf,*pb;

int i;

for(i=0;i

{

pb=(TYPE*) malloc(LEN);

printf(“input Number and Age\n”);

scanf("%d%d",&pb->num,&pb->age);

if(i==0)

pf=head=pb;//结点首地址

else pf->next=pb;

pb->next=NULL;

pf=pb;

}

return(head);

}

在函数外首先用宏定义对三个符号常量作了定义。这里用 TYPE 表示 struct stu,用 LEN表示 sizeof(struct stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便。结构stu 定义为外部类型,程序中的各个函数均可使用该定义。

creat 函数用于建立一个有 n 个结点的链表,它是一个指针函数,它返回的指针指向 stu结构。在 creat 函数内定义了三个 stu 结构的指针变量。head 为头指针,pf 为指向两相邻结点的前一结点的指针变量。pb 为后一结点的指针变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    下方为创客专门针对C语言链表分析的视频资料,对链表感兴趣的可以看看学习下
1

C语言玩转链表 http://www.makeru.com.cn/live/1392_338.html?s=45051 指针

http://www.makeru.com.cn/live/1392_238.html?s=45051

指针换装你还认识吗

http://www.makeru.com.cn/live/5413_2043.html?s=45051

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux C语言链表详细分析
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
用户6754675
2019/11/28
1.2K0
双向链表的增,删,改,查
由于单向链表只能从头遍历,那么在做增删改查操作时,必须从头结点开始遍历。特别是在尾节点做追加操作时,需要将所有节点全部遍历一遍。在时间上花费较多。但是双向链表就不存在这个问题,在对双向链表做追加操作时只需要对头结点的先序节点进行一次遍历就到达了链表的尾部。这样就大大的减少了时间上的开销。
用户6754675
2020/12/10
7060
C语言链表-学习二十九
本文最后更新于2022年02月24日,已超过3天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
XG.孤梦
2022/03/01
3200
C语言链表-学习二十九
C语言入门系列之10.结构体和共用体
引入: 有时需要将不同类型的数据组合成一个有机的整体,以便于引用。 例如,一个学生有学号、姓名、性别、年龄、地址等属性,需要定义int num; char name[20]; char sex; int age; int char addr[30];等属性,如下:
cutercorley
2020/07/23
1.2K0
C语言入门系列之10.结构体和共用体
C语言中都有哪些常见的数据结构你都知道几个??
上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~
用户6754675
2020/09/28
6860
c语言如何利用指针间接赋值
我们都知道,指针是指向一段内存空间的。而这个内存空间也可以存放下一个内存空间的地址,这样一级级的传递下去,就变成了多级指针。在C语言中,多级指针是经常会用到的。
用户6754675
2020/12/17
2K0
C语言 | 链表概述
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构,是根据需要开辟内存单元。
小林C语言
2021/05/07
1.5K0
C语言 | 链表概述
单向链表之删除节点(C语言实现)「建议收藏」
将待删节点与其前一节点解除联系(中间或尾部)或本阶段删除(头节点),并释放相应空间(free)。删除的第一步是找到要删除的节点,同链表查找,如果找不到或链表为空,提示未找到,找到后根据情况删除此节点。删除节点两种情况:第一个节点,后面节点。
全栈程序员站长
2022/11/01
2.6K0
单向链表之删除节点(C语言实现)「建议收藏」
C语言教你写个‘浪漫烟花‘---特别漂亮
首先绘制菜单界面显示文字。烟花有上升阶段和爆炸阶段,定义烟花和烟花弹结构体。 烟花:坐标位置,爆炸的半径大小,最大半径,中心距左上角的距离,长宽,像素,时间等。 烟花弹:坐标位置,最高点,是否发射,时间,个数等。 初始化数据。加载资源贴图。随机发射数目随机,
用户6754675
2020/12/07
5.9K0
链表的基本操作_简单链表
链表是环环相扣的,head头指针指向头结点,头结点指向首元结点,首元结点指向第二个结点…直到最后的结点。
全栈程序员站长
2022/11/15
6350
链表的基本操作_简单链表
C语言 | 建立链表,输出各结点中的数据
例42:C语言实现一个简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。
小林C语言
2020/12/23
1.3K0
C语言 | 建立链表,输出各结点中的数据
玩转C语言链表-链表各类操作详解
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
用户6754675
2020/05/25
1.6K0
【C语言】链表的使用及链表的实现原理
1.逻辑结构上⼀个挨⼀个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相 反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。
大数据小禅
2021/12/20
1K0
C语言 | 简单链表
这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。
小林C语言
2020/12/25
2K0
C语言数据结构——链表
在链表中有一个头指针变量,图中head表示的就是头指针,这个指针变量保存一个地址。也就是说头指针指向一个变量,这个变量就是量表的元素。在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所包含的数据,而指针部分用来指向下一个元素。最后一个元素的指针指向null,表示指向的地址为空。
C语言中文社区
2022/05/30
1.3K0
C语言数据结构——链表
C++指向结构体变量的指针构成链表
链表有一个头指针变量,以head表示,它存放一个地址,该地址指向一个元素。链表中的每一个元素称为结点,每个结点都应包括两个部分:
小林C语言
2021/01/01
1.4K0
C++指向结构体变量的指针构成链表
C语言链表和关键字typedef
例:构建一个有3个学生的链表,学生信息包括:学号,姓名,成绩。输出链表中每一个学生的全部信息。
岳泽以
2022/10/26
3310
【C语言】指针与结构体
变量有不同的类型,整形,浮点型等。那指针也有不同的类型,要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,我们给指针变量相应的类型。
平凡的人1
2022/11/15
8760
【C语言】指针与结构体
C语言-链表排序_单链表的排序c语言
My first try on Linkedlist, quite hard for me at first especially the beginning part also pointer is a hard part for I havn’t understood yet BUT PRACTICE PAYS I finally get to know it
全栈程序员站长
2022/11/07
5K0
一万六千字详解C语言struct 结构体与 union 共用体
struct即结构体,C程序中经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别等不同类型的数据时,像这种数据类型总是在一起出现,那么我们不如把这些变量装入同一个“文件夹”中,这时用的关键字struct声明的一种数据类型就是表示这个“文件夹”的使用。那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。
C语言中文社区
2022/11/08
2.1K0
一万六千字详解C语言struct 结构体与 union 共用体
相关推荐
Linux C语言链表详细分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验