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个节点的情况:

效果如下:

那么申请多个节点呢?如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);

效果图:

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

对赋值做改动:

那么遍历就可以改进了:

效果:

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

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

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

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

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

宁采臣 c语言好爽,C语言链表的来源分析相关推荐

  1. C语言链表的来源分析

    C语言中的链表是重点,也是难点,而且意义非凡.对链表的的抽象和恐惧是源于对它的来龙去脉的不明白.所以很有必要对它的发展渊源做透彻分析. 链表的单位是节点,而节点源于复合数据类型:结构体: 节点和结构体 ...

  2. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  3. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  4. c语言实现两个有序链表的合并(代码示例)

    c语言实现两个有序链表的合并: 现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存 #include #include typedef struct ...

  5. C语言游戏传递小秘密,C语言的那些小秘密之链表

    大多数的读者在学习编程语言的时候都不喜欢那些枯燥的文字描述,包括我自己在开始学习编程的时候也是这样,对于代码的热情远远高于文字,所以我在我写东西的时候也不喜欢用枯燥的文字描述来向读者讲解,更喜欢用代码 ...

  6. Nwafu-OJ-1485 Problem o C语言实习题八——单链表结点的阶乘和

    问题 : C语言实习题八--单链表结点的阶乘和 时间限制: 1 Sec  内存限制: 128 MB 提交: 5120  解决: 1555 [提交][状态][讨论版] 题目描述 要求实现一个函数,求单向 ...

  7. C语言链表学生成绩制作成链表,C语言程序设计课程设计基于链表的学生成绩管理系统.doc...

    C语言程序设计课程设计基于链表的学生成绩管理系统 华北科技学院计算机系综合性实验报告 PAGE 第 PAGE 10 页 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 C语言程序设计 实验学 ...

  8. c语言将两个有序表合并为一个有序表,c语言实现两个有序链表的合并(代码示例)...

    本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 教程推荐:<c语言教程视频> c语言实现两个有序链表的合并 ...

  9. 每日程序C语言44-反向输出一个链表(递归)

    题目: 反向输出一个链表-递归 程序分析 只需要反向输出即可,所以我们可以使用栈的特点,进行递归调用 递归过程如下: 主要代码 main.c typedef struct Node{int data; ...

最新文章

  1. SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法
  2. man手册查找ascii码和运算符优先级
  3. 玩转spring mvc入参自定义类型转换和格式化
  4. TypeForwardedTo Attribute ---- 类型传递
  5. start ssh-agent
  6. python 重复输出字符串
  7. 虚拟主机和托盘服务器,虚拟主机和托盘服务器
  8. 【渝粤教育】国家开放大学2018年秋季 0690-21T化工原理及实验 参考试题
  9. cisco 交换机通过console 导入 IOS
  10. linux NFS 配置步骤
  11. 光猫修改html灰色选项,电信光猫怎么设置(修改)wifi密码?
  12. 关卡二:Flex伸缩布局
  13. bert做文本摘要_BERT文本摘要
  14. 长尾效应解析以及长尾效应在电商中的应用
  15. 【视频分享】尚硅谷Java视频教程_Spring Boot视频教程(下)整合篇
  16. 微信小程序----微信小程序浏览pdf文件
  17. 图卷积神经网络(GCN)
  18. linux 命令行下载mysql
  19. 超市购物车的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. demiiris (pymel) for maya 2017 +

热门文章

  1. avalon视频学习笔记(六)
  2. 【Hadoop代码笔记】Hadoop作业提交之客户端作业提交
  3. C++ string和c类型字符数组的比较
  4. document.referer的使用
  5. VS2010 C# 4.0新特性一览
  6. mysql 40014无效,Oracle问题-ORA-14400:插入的分区关键字未映射到任何分区
  7. Python稳基修炼之计算机等级考试易错细节题3(含答案)
  8. 2021年8月Python小屋编程比赛获奖名单
  9. Python重复字符串并使用指定分隔符进行连接
  10. 标准C语言只有,只有Visual C++集成开发环境,可以编译标准C语言程序。