一步一步教你从零开始写C语言链表--->构建一个链表
2023-09-27 14:28:47 时间
1、解决数组无法存储多种数据类型的问题。
2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。
3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。
深究C语言4.链表和结构体 链表和结构体算是比较难的东西了,而且,这些还是为了后面学数据结构打基础,可谓是承上启下的作用,一定要把它学好。
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
1、解决数组无法存储多种数据类型的问题。
2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。
3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。
先来感性的认识一下链表,我们先来认识下简单的链表:
从这幅图我们得出以下信息:
这个简单链表的构成:
头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。
实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。
接下来看看链表的数据结构:
struct list_node int data ; //数据域,用于存储数据 struct list_node *next ; //指针,可以用来访问节点数据,也可以遍历,指向下一个节点那么如何来创建一个链表的一个节点呢?
我们写个程序演示一下:
#include stdio.h #include stdlib.h #include string.h struct list_node int data ; struct list_node *next ; typedef struct list_node list_single ; int main(void) list_single *node = NULL ; //1、首先,当然是定义一个头指针 node = malloc(sizeof(list_single)); //2、然后分配内存空间 if(node == NULL){ printf("malloc fair!\n"); memset(node,0,sizeof(list_single)); //3、清一下 node- data = 100 ; //4、给链表节点的数据赋值 node- next = NULL ; //5、将链表的指针域指向空 printf("%d\n",node- data); return 0 ; }那么,这仅仅只是创建一个链表中的一个节点,为了好看,我们把创建节点封装成函数,以后想创建多少个节点,我们就可以反复调用一个函数来创建,会很方便:
list_single *create_list_node(int data) list_single *node = NULL ; node = malloc(sizeof(list_single)); if(node == NULL){ printf("malloc fair!\n"); memset(node,0,sizeof(list_single)); node- data = 100 ; node- next = NULL ; }接下来在程序上完成的程序:
#include stdio.h #include stdlib.h #include string.h struct list_node int data ; struct list_node *next ; typedef struct list_node list_single ; list_single *create_list_node(int data) list_single *node = NULL ; node = malloc(sizeof(list_single)); if(node == NULL){ printf("malloc fair!\n"); memset(node,0,sizeof(list_single)); node- data = 100 ; node- next = NULL ; int main(void) int data = 100 ; list_single *node_ptr = create_list_node(data); //创建一个节点 printf("node_ptr- data=%d\n",node_ptr- data); //打印节点里的数据 printf("node_ptr- next=%d\n",node_ptr- next); return 0 ; }执行结果 :
这样我们就完成一个链表节点的创建了,那么它现在的样子如下图:
链表的结构里,数据存储了100,因为这个链表只有一个节点,所以它的指针域指向了NULL。
深究C语言4.链表和结构体 链表和结构体算是比较难的东西了,而且,这些还是为了后面学数据结构打基础,可谓是承上启下的作用,一定要把它学好。
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
相关文章
- Leetcode: Reorder List && Summary: Reverse a LinkedList
- QT高级编程技巧(一)-- 编写高效的signal & slot通信代码
- async & await 的前世今生(Updated)----代码demo
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
- JavaWeb-04(BOM&DOM)
- 【知识点】二进制移位运算符 “<<“及“>>“,“&“,“|“,“^“
- English trip V2 - 11 Health and Well-being 健康和幸福 Teacher:Ginny Key: Verb + gerund(-ing) & verb + infinitive 动名词 & 动词+原型
- PLSQL乱码&TNS-12557: protocol adapter not loadable解决
- UVa 12709 && UVaLive 6650 Falling Ants (水题)
- go test test & benchmark
- 读JS高级API笔记_(DOM&&DOM2&&DOM3)哎呀——园龄才9个月啊
- Linux注销&登陆
- 小治同学的JAVAWEB学习笔记-Junit&反射&注解
- React生产环境打包&&后台环境运行(有跨域+无跨域)
- Linux && vim 批量替换
- 知识图谱入门学习笔记(五)-知识抽取之数据采集&命名实体识别
- 统计学方法&机器学习实战(四) 朴素贝叶斯算法
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型(CSOM)基础
- 学习笔记(15):Python网络编程&并发编程-进程理论
- 学习笔记(14):Python网络编程&并发编程-文件传输功能实现
- CSS3&JavaScript 图片分隔切换
- CSS3&JavaScript 仿微信对话框和时间格式化处理