温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言链表的来源分析

发布时间:2020-07-13 17:34:46 来源:网络 阅读:298 作者:ningcaichen66 栏目:编程语言

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年)宁采臣录制的。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI