数组和链表分别⽐较适合⽤于什么场景
数组和链表分别⽐较适合⽤于什么场景
1  数组和链表简介
  在计算机中要对给定的数据集进⾏若⼲处理,⾸要任务是把数据集的⼀部分(当数据量⾮常⼤时,可能只能⼀部分⼀部分地读取数据到内存中来处理)或全部存储到内存中,然后再对内存中的数据进⾏各种处理。
  例如,对于数据集 S{1,2,3,4,5,6},要求 S 中元素的和,⾸先要把数据存储到内存中,然后再将内存中的数据相加。当内存空间中有⾜够⼤的连续空间时,可以把数据连续的存放在内存中,各种编程语⾔中的数组⼀般都是按这种⽅式存储的(也可能有例外),如图1(b);当内存中只有⼀些离散的可⽤空间时,想连续存储数据就⾮常困难了,这时能想到的⼀种解决⽅式是移动内存中的数据,把离散的空间聚集成连续的⼀块⼤空间,如图 1(c)所⽰,这样做当然也可以,但是这种情况因为可能要移动别⼈的数据,所以会存在⼀些困难,移动的过程中也有可能会把⼀些别⼈的重要数据给丢失。另外⼀种,不影响别⼈的数据存储⽅式是把数据集中的数据分开离散地存储到这些不连续空间中,如图(d)。这时为了能把数据集中的所有数据联系起来,需要在前⼀块数据的存储空间中记录下⼀块数据的地址,这样只要知道第⼀块内存空间的地址就能环环相扣地把数据集整体联系在⼀起了。C/C++中⽤指针实现的链表就是这种存
储形式。
  由上可知,内存中的存储形式可以分为连续存储和离散存储两种。因此,数据的物理存储结构就有连续存储和离散存储两种,它们对应了我们通常所说的数组和链表
2 数组和链表的区别
  数组是将元素在内存中连续存储的;
优点:因为数据是连续存储的,内存地址连续,所以在查数据的时候效率⽐较⾼;
indexof能用于数组吗缺点:在存储之前,我们需要申请⼀块连续的内存空间,并且在编译的时候就必须确定好它的空间的⼤⼩。在运⾏的时候空间的⼤⼩是⽆法随着你的需要进⾏增加和减少⽽改变的,当数据两⽐较⼤的时候,有可能会出现越界的情况,数据⽐较⼩的时候,⼜有可能会浪费掉内存空间。在改变数据个数时,增加、插⼊、删除数据效率⽐较低链表是动态申请内存空间,不需要像数组需要提前申请好内存的⼤⼩,链表只需在⽤的时候申请就可以,根据需要来动态申请或者删除内存空间,对于数据增加和删除以及插⼊⽐数组灵活。还有就是链表中
数据在内存中可以在任意的位置,通过应⽤来关联数据(就是通过存在元素的指针来联系)。
3 链表和数组使⽤场景
  数组应⽤场景:数据⽐较少;经常做的运算是按序号访问数据元素;数组更容易实现,任何⾼级语⾔都⽀持;构建的线性表较稳定。
  链表应⽤场景:对线性表的长度或者规模难以估计;频繁做插⼊删除操作;构建动态性⽐较强的线性表。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。