当前位置: 首页 > 面试题库 >

请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点?

瞿兴朝
2023-03-14
本文向大家介绍请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点?相关面试题,主要包含被问及请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点?时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

1.数组:

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少插入和删除元素,就应该用数组。

2.链表:

链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表。

3.区别:

(1)存储位置上:

数组逻辑上相邻的元素在物理存储位置上也相邻,而链表不一定;

(2)存储空间上:

链表存放的内存空间可以是连续的,也可以是不连续的,数组则是连续的一段内存空间。一般情况下存放相同多的数据数组占用较小的内存,而链表还需要存放其前驱和后继的空间。

(3)长度的可变性:

链表的长度是按实际需要可以伸缩的,而数组的长度是在定义时要给定的,如果存放的数据个数超过了数组的初始大小,则会出现溢出现象。

(4)按序号查找时,数组可以随机访问,时间复杂度为O(1),而链表不支持随机访问,平均需要O(n);

(5)按值查找时,若数组无序,数组和链表时间复杂度均为O(1),但是当数组有序时,可以采用折半查找将时间复杂度降为O(logn);

(6)插入和删除时,数组平均需要移动n/2个元素,而链表只需修改指针即可;

(7)空间分配方面:

数组在静态存储分配情形下,存储元素数量受限制,动态存储分配情形下,虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,而且如果内存中没有更大块连续存储空间将导致分配失败;即数组从栈中分配空间,,对于程序员方便快速,但自由度小。

链表存储的节点空间只在需要的时候申请分配,只要内存中有空间就可以分配,操作比较灵活高效;即链表从堆中分配空间, 自由度大但申请管理比较麻烦。

哈希表可以结合数组和链表的优点

 类似资料:
  • 本文向大家介绍请回答一下HTTP和HTTPS的区别,以及HTTPS有什么缺点?相关面试题,主要包含被问及请回答一下HTTP和HTTPS的区别,以及HTTPS有什么缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: HTTP协议和HTTPS协议区别如下: 1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性 2)HTT

  • 本文向大家介绍请分别介绍一下aof和rdb都有哪些优点?以及两者有何区别?相关面试题,主要包含被问及请分别介绍一下aof和rdb都有哪些优点?以及两者有何区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:redis   RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时

  • 本文向大家介绍请你回答一下map和unordered_map优点和缺点?相关面试题,主要包含被问及请你回答一下map和unordered_map优点和缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 对于map,其底层是基于红黑树实现的,优点如下: 1)有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作 2)map的查找、删除、增加等一系列操作时间复杂度稳定

  • 本文向大家介绍请你说明concurrenthashmap有什么优势以及1.7和1.8区别?相关面试题,主要包含被问及请你说明concurrenthashmap有什么优势以及1.7和1.8区别?时的应答技巧和注意事项,需要的朋友参考一下 考点:集合 Concurrenthashmap线程安全的,1.7是在jdk1.7中采用Segment + HashEntry的方式进行实现的,lock加在Segme

  • 本文向大家介绍Fetch和Ajax比有什么优缺点?相关面试题,主要包含被问及Fetch和Ajax比有什么优缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: promise方便异步,在不想用jQuery的情况下,相比原生的ajax,也比较好写。

  • 本文向大家介绍请你回答一下Array&List, 数组和链表的区别相关面试题,主要包含被问及请你回答一下Array&List, 数组和链表的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 数组的特点: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。数组的插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。删除数据时,