数组和链表

1.链表是什么:
链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素和元素.
链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列,通过改变数组大小实现。而链表不是用顺序实现的,用指针实现,在内存中不是连续的。意思就是,链表就是将一系列不连续的内存联系起来,将碎片内存进行合理的利用,解决空间的问题。
链表分为单向链表,双向链表和循环链表.单向链表包含两部分,一部分存储或显示关于节点的信息,一部分存储下一个节点的地址.双向链表则分为三部分,两端用来存储上一个节点的地址以及下一个节点的地址,中间用来存储或显示关于节点的信息.循环链表和单向链表区别就是最后一个元素的指针不直向空值或空列表,而是指向了第一个节点.
2.数组是什么:
数组就是有限个相同类型的变量所组成的一个集合,数组中的每个变量可以成为一个元素,数组在内存中是顺序存储的,需要开辟连续的内存空间.
3.数组和链表的简介:
在计算机中要对给定的数据进行若干处理,首要任务是把数据的一部分(当数据量非常大时,可能只能一部分一部分地读取数据到内存中来处理)或全部存储到内存中,然后再对内存中的数据进行处理.
例如,对于数据集合S{1,2,3,4,5},要求S中元素的和,首先要把数据存储到内存中,然后再将内存中的数据相加.
当内存中有足够大的连续空间时,可以把数据连续的存放到内存中,各种编程语言中的数组一般都是按照这种方式存储的;当内存中只有一些离散的可用空间时,想连续存储数据就非常困难了,这时能想到的一种解决方式就是移动内存中的数据,把离散的空间聚集成一块大空间,这样做当然也可以,但是这种情况可能要移动别人的数据,所以存在一些困难,移动过程中可能会把别人的数据弄丢.另外一种做法就是,在不影响别人的数据的情况下,把数据集中的数据分开离散的存储到这些不连续的空间中.这时为了把这些数据联系起来,需要在前一块数据的存储空间中记录下一块数据的地址,这样只要知道第一块内存空间的地址就能环环相扣地把数据整体联系到一起了.C/C++中用指针实现的链表就是这种存储形式.
由上可知,内存中的数据的存储方式可以分为连续存储和离散存储两种.因此,数据的物理存储结构就有连续存储和离散存储两种,它们对应了我们通常说的数组和链表.
4.数组和链表的区别:
数组是将元素在内存中连续存储的;它的优点:因为数据是连续存储的,内存地址连续,所以在查找数据的时候效率比较高;它的缺点:在存储之前,我们需要申请一块连续的内存空间,并且在编译的时候就必须要确定好它的空间的大小.在运行的时候空间的大小是无法随着你的需要进行增加和减少的,当数据比较大的时候,有可能会出现越界的情况,数据比较小,又有可能浪费掉内存空间,在改变数据个数时,增加、插入、删除数据效率就比较低.
链表是动态申请内存空间,不需要像数组需要提前申请好内存的大小,链表只需要在用的时候再申请就可以,根据需要来动态申请或删除内存空间,对于数据增加和删除以及插入比数组灵活.还有就是链表中数据在内存中可以在任意位置,通过应用来关联数据(就是通过存在元素的指针来联系).
5.链表和数组使用场景:
数组的应用场景:数据比较少;经常做的运算是按序号访问数据元素;数组更容易实现,任何高级语言都支持;构建的线性表较稳定.
链表的应用场景:对线性表的长度或内容难以估计;频繁的插入或删除操作;构建动态性比较强的线性表.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值