博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步一步教你从零开始写C语言链表--->构建一个链表
阅读量:6225 次
发布时间:2019-06-21

本文共 1944 字,大约阅读时间需要 6 分钟。

为什么要学习链表?

链表主要有以下几大特性:

1、解决数组无法存储多种数据类型的问题。

2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。

3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。

先来感性的认识一下链表,我们先来认识下简单的链表:

从这幅图我们得出以下信息:

这个简单链表的构成:

头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。

实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。

接下来看看链表的数据结构:

struct  list_node{	int data ; //数据域,用于存储数据	struct list_node *next ; //指针,可以用来访问节点数据,也可以遍历,指向下一个节点};
那么如何来创建一个链表的一个节点呢?

我们写个程序演示一下:

#include 
#include
#include
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 
#include
#include
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。

你可能感兴趣的文章
第4章:介绍python对象类型/4.1 python的核心数据类型/4.2 字符串/4.2.4 字
查看>>
10.13笔记
查看>>
为什么大家都在学Python?
查看>>
测试工作的重要性和合作性
查看>>
我的友情链接
查看>>
常用服务器SSL证书安装方法大全
查看>>
mysql的主从复制,从库设为只读不能写
查看>>
linux使用mount挂载windows共享盘
查看>>
电脑盘符找不到找到文件的方法
查看>>
vSphere虚拟化之外部存储部署(下)
查看>>
云计算网络基础第六天
查看>>
Linux运维都要会哪些shell编程技能?
查看>>
把特斯拉送上火星的程序员,马斯克!
查看>>
git--客户端管理工具初步使用
查看>>
阿里的面试官都喜欢问哪些技术问题?
查看>>
基于curl 的zabbix API调用
查看>>
data guard 的部署
查看>>
oracle hints的那点事
查看>>
U盘拒绝访问怎么办?
查看>>
多网卡team,聚合连接(链路聚合)
查看>>