OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6548|回复: 1

C语言数据结构一一如何理解链表与数组呢?

[复制链接]

1049

主题

1060

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4359
金钱
4359
注册时间
2019-5-8
在线时间
1193 小时
发表于 2021-11-1 17:50:55 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2021-11-1 18:14 编辑

以下文章摘自微信公众号——开源电子网《如何理解链表与数组呢? 》
更多技术文章,请扫下方二维码关注

开源电子网,扫码2222222.png



在学习数据结构的时候,我们接触了数组和链表,那么两者到底有哪些区别呢,首先我们分别讨论。

一.数组

    数组是有序的元素序列,用来存储一系列数据,例如我们定义一个数组inta[5] ={0,1,2,3,4};的数组,inta[5]为自定义设置固定长度,里面包含五个元素,a[0]对应数组的第一个元素,而a[n-1]对应数组的最后一个元素,从内存来看:数组由连续的内存位置组成,如以下图所示:

如何理解链表与数组197.png


数组优点?

由于数组是连续的内存位置组成的,所以数组应用需要快速访问数据。

数组缺点?

①如果我们插入一个元素,显然上述的int a[5]数组无法插入的,因为该数组已经越界了,注意:数组不能动态扩展空间的,所以无法插入。

②如果我们删除一个元素a[0],那么后面的元素进行逐一的移位,如果我们数组的长度设置为1000呢,首位除去,是不是进行大面积的移位,造成时间的复杂度是非常高的。例如排队时候,前面除去一个,后面的人是不是逐一的向前一位。

二.链表

    链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起,链表分为两种链表(单向和双向)而单向和双向链表也分为两种,循环还是不循环,接下来我们就以单向链表为例,

    在了解单向链表之前,我们必须知道单向链表的结构体怎么定义的,如以下源码所示:

  1. struct os_node

  2. {

  3.      /* 下一个节点的指针 */

  4.      struct os_node *next;

  5. uint8_t data

  6. };
复制代码

    这个结构体主要包含了两个,一个是挂载的数据,另一个是成员变量next,指向下一个节点的指针,在我们学习C语言时候,指针也就是内存地址,那么它指向内存地址的,如以下源码所示:

  1. #include<stdio.h>

  2. int main()

  3. {

  4.   /*int类型的变量*/

  5.   int lv_variate=10;

  6.   /*指针变量*/

  7.   int*ip_variate;

  8.   /*在指针变量存储lv_variate地址*/

  9.   ip_variate=&lv_variate;

  10.   printf("ip_variate指针变量存储的地址:%p\n",ip_variate);

  11.   return 0;

  12. }
复制代码

    执行上述的源码我们就可以得到下面的图:

如何理解链表与数组974.png

    总结:ip_variate的指针变量存储的是lv_variate变量的地址。

    既然我们已经知道指针变量存储的是指向变量的地址,那么我们看下面单向链表的示意图我们就会明白。

如何理解链表与数组1065.png

    从内存来看,单向链表的节点是非连续的内存位置,如以下图所示:

如何理解链表与数组1099.png

    所以我们需要插入一个数据或者删除一个数据,我们只需要修改next的下一个节点指针指向即可,如以下图所示:

如何理解链表与数组1155.png

    我们只要把数据节点1的next指针指向数据节点2的下一个数据节点即可,插入也是一样,如图所示:

如何理解链表与数组1206.png


链表的优点

    应用于插入以及删除数据,因为他们直接插入以及直接删除。

链表的缺点

    由于链表是非连续的内存位置组成的,所以链表不适用快速访问数据。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
324
金钱
324
注册时间
2020-10-15
在线时间
49 小时
发表于 2023-6-30 15:07:03 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-14 11:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表