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

转载于:https://blog.51cto.com/ningcaichen66/1969643

C语言链表的来源分析相关推荐

  1. 宁采臣 c语言好爽,C语言链表的来源分析

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

  2. 使用C语言链表创建学生信息并且将信息打印输出

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  3. 《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解

    <C++应用程序性能优化::第二章C++语言特性的性能分析>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版.最近出了新版,看了目录,在前面增加了一章 ...

  4. C语言 | 链表概述

    C语言链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构,是根据需要开辟内存单元. 链表有一个"头指针"变量,它存放一个地址,该地址指向一个元素. 链表中每 ...

  5. c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇

    用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷) 借助游戏内容分析贪吃蛇所需的功能主要包括这几块: 移动光标模块 打印地图模块和基本规则信息 读取最高分文件 打印初始蛇模块 打印时给予蛇的初 ...

  6. c语言编写计算机软件,基于C语言的计算机软件编程分析.doc

    基于C语言的计算机软件编程分析.doc 基于C语言的计算机软件编程分析 摘要:C语言是一种重要的编程语言,在当今IT业的运用十分广泛.使用C语言来编写的程序简单.直接.准确,极大地推动了计算机软件的更 ...

  7. 《Java语言程序设计》 课程分析与总结(上)---我为什么这样设计考试试卷?

    <Java语言程序设计>课程分析与总结(上) 我为什么这样设计考试试卷? 自2003年以来,我承担了北京理工大学计算机学院<Java语言程序设计>这门课的教学任务,从2000级 ...

  8. 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)

    不废话直接附上源代码下载链接(一杯奶茶钱就能换一套图书管理系统哦~): C语言链表实现图书管理系统功能齐全(书籍信息以及用户信息保存在附带的txt文件中)-C文档类资源-CSDN文库 抱歉本人总是忘记 ...

  9. clair、anchore、trivy开源数据库的数据来源分析

    数据来源分析 trivy trivy 分了四个仓库进行维护,分别是 trivy 负责提供cli交互程序 trivy-db 负责将处理好的数据打包成blot格式 vlun-list 负责存放处理好的原始 ...

最新文章

  1. HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。...
  2. anaconda切换python版本及对应环境,太方便
  3. this指针用法详解
  4. 具体解释VB中连接access数据库的几种方法
  5. 《C++ Primer 5th》笔记(5 / 19):语句
  6. js设置radio选中
  7. linux java jdk配置_Linux环境下安装JDK并配置环境变量
  8. 【python 作日期的折线图和柱状图组合图】
  9. 巨象指纹浏览器可以帮助用户做些什么?
  10. 【观察】智能+新时代,智慧酒店未来该何去何从?
  11. mumu按键精灵_什么安卓模拟器可实现操作录制?MuMu模拟器成为你的按键精灵_MuMu安卓模拟器/MuMu手游助手...
  12. 高性能RabbitMQ消息队列介绍 及 SpringBoot整合
  13. 医院无线认证平台怎么样
  14. 可交换债券是特殊的公司债
  15. 19、会员中心 - 小程序端开发 - 微擎小程序模块应用开发
  16. 程序员团队名称和口号_济南市大学生双创孵化平台创业菁英实训营2019年第五期【最具人气创业团队】由你来选!...
  17. 确定circle曲率
  18. 如何在 Ubuntu 20.04 上安装 Tomcat 9
  19. 【研究型论文】Encrypted Malware Traffic Detection via Graph-based Network Analysis
  20. WebSecurity

热门文章

  1. android 判断手机为小米
  2. 一个成功的Git分支模型
  3. DLmalloc 内存分配算法
  4. OpenCV图像剪切,超出图像区域指定颜色填充
  5. Springboot+Swagger
  6. 模板 - 快速输入输出
  7. H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解(转载)
  8. vb.net 文本框为空提示,一键清空文本框所有内容
  9. redis哨兵相关详解
  10. 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)