C语言链表的来源分析

简介:

C语言中的链表是重点,也是难点,而且意义非凡。对链表的的抽象和恐惧是源于对它的来龙去脉的不明白。所以很有必要对它的发展渊源做透彻分析。

链表的单位是节点,而节点源于复合数据类型:结构体;

节点和结构体的区别就是看是否有指针域,目的就是想找到下一个节点;

结构体形如:

struct Ghost

{

char name[30];

int age;

int height;

char addr[30];

};

节点形如:

struct Ghost

{

char name[30];

int age;

int height;

char addr[30];

struct Ghost *next;

};

现在来看一下创建1个节点的情况:

C语言链表的来源分析

效果如下:

C语言链表的来源分析

那么申请多个节点呢?如3个。

核心代码如下:

//堆中申请变量

struct Ghost *g1 = (struct Ghost*)malloc(sizeof(struct Ghost));

struct Ghost *g2 = (struct Ghost*)malloc(sizeof(struct Ghost));

struct Ghost *g3 = (struct Ghost*)malloc(sizeof(struct Ghost));

//赋值

strcpy(g1->name, "聂小倩");

g1->age = 22;

g1->height = 165;

strcpy(g1->addr, "兰若寺");

g1->next = NULL;

//赋值

strcpy(g2->name, "付清风");

g2->age = 23;

g2->height = 166;

strcpy(g2->addr, "十里亭");

g2->next = NULL;

//赋值

strcpy(g3->name, "东方不败");

g3->age = 24;

g3->height = 167;

strcpy(g3->addr, "黑木崖");

g3->next = NULL;

//遍历

printf("姓名:%s", g1->name);

printf("年龄:%d", g1->age);

printf("身高:%d", g1->height);

printf("地址:%s", g1->addr);

//遍历

printf("姓名:%s", g2->name);

printf("年龄:%d", g2->age);

printf("身高:%d", g2->height);

printf("地址:%s", g2->addr);

//遍历

printf("姓名:%s", g3->name);

printf("年龄:%d", g3->age);

printf("身高:%d", g3->height);

printf("地址:%s", g3->addr);

效果图:

C语言链表的来源分析

成功是成功了,但这很原始,可以改进的:借助成员指针的力量自动去找下一个,让链起来!

对赋值做改动:

C语言链表的来源分析

那么遍历就可以改进了:

C语言链表的来源分析

效果:

C语言链表的来源分析

这样,我只要知道第1个节点的位置,后面的就可以一股脑的扯出来。这就是链表。

特点:链表是一连串节点链起来的,是线性特点。只要拿第1个节点,就可以把一堆的节点都找到。就像贪吃蛇一样,蛇头走到哪里,蛇身和蛇尾就跟到哪里。

和数组类似,数组的第1个元素的首地址就是数组的地址;链表的第1个节点的地址就是链表的首地址;

接下来就可以封装出操作链表的函数了,如:遍历链表,添加节点,删除节点,统计节点。

更多详细的链表分析参考《C语言,好爽》第7版(2017年)宁采臣录制的。











本文转自 ningcaichen66 51CTO博客,原文链接:http://blog.51cto.com/ningcaichen66/1969056,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
|
3月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
161 4
|
4月前
|
C语言
无头链表再封装方式实现 (C语言描述)
如何在C语言中实现无头链表的再封装,包括创建节点和链表、插入和删除操作、查找和打印链表以及销毁链表的函数。
42 0
|
4月前
|
测试技术 C语言
单链表之无头链表(C语言版)
本文详细介绍了使用C语言实现无头单链表的方法,包括节点和链表结构的定义、链表的创建与销毁、节点的插入与删除,以及链表的打印等功能。文章通过具体的代码示例,展示了如何在无头链表中进行头插法、尾插法、自定义位置插入和删除,以及如何清空和销毁链表。
62 0
单链表之无头链表(C语言版)
|
3月前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
125 0
|
4月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
54 0
|
7月前
|
存储 数据管理 C语言
C语言实战 | 使用链表完成“贪吃蛇”游戏
【7月更文挑战第1天】整体思维,即系统思维,强调以整体视角理解事物。在编程中,结构体体现这种思想,将相关变量打包处理。示例展示了如何用链表而非数组实现“贪吃蛇”游戏,链表提供了更灵活的动态数据管理。一系列代码图片详细描绘了链表结构体在游戏中的应用,包括节点定义、移动、碰撞检测等,凸显了使用链表的优势和代码的清晰组织。
83 0
C语言实战 | 使用链表完成“贪吃蛇”游戏
|
8月前
|
存储
数据结构——双向链表(C语言版)
数据结构——双向链表(C语言版)
41 2
|
8月前
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
63 2
|
9月前
|
存储 C语言 Python

热门文章

最新文章