P1 什么是链表 C语言简单易懂

目录

前言

01 什么是链表

02 数组的特点 

03 数组的缺点

3.1 删除数组其中一个元素

3.2 数组增加某个节点

04 链表


前言

                                 

🎬 个人主页@ChenPi

🐻推荐专栏1: 《 C++ 》✨✨✨ 

🔥 推荐专栏2: 《 Linux C应用编程(概念类)》✨✨✨

📝推荐专栏3: ​​​​​​《链表_@ChenPi的博客-CSDN博客》 ✨✨✨
🍉本篇简介:>:讲解链表的运行方式和链表和数组的区别

这一节,我们来讲解链表。很多很多人看到链表两个字啊,就觉得怕,其实它不可怕的,而且很好用,现在我们就来讲解链表

01 什么是链表

它就是一个普通结构体的应用而已。

链表啊,它是一个好东西啊,之所以能够存在列表这个东西,说明它能够帮忙解决一些实际问题。

链表只是一种数据结构。

那所谓的数据结构就是数据存放的思想。

明我们说编程难的并不是c语言本身,

而是一些思想。其中,链表就是一种数据存放的一种思想。

02 数组的特点 

我们以前学过数据存放,也可以说数据的一个集合。

学过数组吧,大家都对这个数组很熟悉

他非常明白了一个特点是。每一个元素地址。都是连续的。

比如说我们一个数组arr。

int arr[10] = {0,1,2,3,4,5,6,7,8,9,10};

其中有10个数据,比如说12345678910啊。

它就是在内存连续的一段空间。存放123456  直到10啊,假设这个初始地址是你0x00啊,那么第二个是0x0,int整形数的大小是四个字节,地址是连续的,也就是说。最大空间就是10*4 = 40

数组的特点就是在一个连续的内存空间里面存放着某些特点的数据

这是它的特点啊,一种比较特别的数据存储方式 

03 数组的缺点

那这样有什么缺点吗?

数组的话改其中的数据或者查询数据的话其实还好

但是如果你要增加一个元素呢?你要删除一个元素呢?

3.1 删除数组其中一个元素

删除一个元素是不是很很困难?

数组的地址是连续的

假设说,我这个第三个元素被我干掉了。那你该如何处理这个地址空间,

它的数据已经变得不连续了。

如果要把右边的数据都往左移

你的运算量就比较大了,你要挪动整个数组。

3.2 数组增加某个节点

比如说我要在这个六跟七之间啊,加一个11啊,怎么办啊?

因为他们地址连续的代表这个空间是没有多余的内存的,

实际上,你要把11存放进来,你首先要数到六,然后把七八九十往后挪一挪,

腾出一个位置给11啊,你的内存的开销,你的运算量肯定会变大的,所以说不灵活

而且数组一开始的时候就把大小给确认了,所以说不管是malloc也好,还是数组,也是都是一口气申请了多大的空间啊,他们都存在这个问题不灵活,

04 链表

那链表表就很好的解决了这个问题。列表的每一项,它都是一个结构体。

struct Node {
	int value; // 值
	Node *next; // 下一个节点指针
};

比如说我现在有一个链表,

里面有两项一项是一个整形数的一个数据value

下一个是一个指针,struct Node * test

比如说现在有这个结构体1

结构体1里面有个指针,我结构体1的指针指向结构体2的地址,结构体2的指针指向结构体3的地址,也就是说这几个结构体是被串联在一起的

这样子无疑就给整个数据的存储添加了很大的灵活性,比如说我现在有这么一串数啊,12345。

我先要把三删掉,那不很简单吗,把二里面存放的地址改成四嘛就完了删就删掉了就一句话

如果要是数组的话呢?12345,你把3删掉,删掉以后,这个内存啊,数据还得往前挪,五个数据还好,假设后面有100个数据?你都要挪多少次啊啊

如果是链表,那我这个后面有100个数据,是不是也很好处理啊?跟后面的数据没关系吧,我只要去变动二里面的指针地址只像是就可以了,多灵活是不是那我先要增加一下怎么办呢?

同样的我有100个数据,我想要在这个这里插入一下,怎么办?那它的下一个指向它那新的下一个指向这个。链表很灵活,

那下一小章,我们来正式的来学习链表,它是个好东西,不要怕它啊,学会以后合理的使用它。

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@ChenPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值