[数据结构] 数组与链表的优缺点和区别

转载 2018年04月17日 18:50:51

概述

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

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

内存存储区别

数组从中分配空间, 对于程序员方便快速,但自由度小。

链表从中分配空间, 自由度大但申请管理比较麻烦. 

逻辑结构区别

数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。 

链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项) 

总结

1、存取方式上,数组可以顺序存取或者随机存取,而链表只能顺序存取; 

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

3、存储空间上,链表由于带有指针域,存储密度不如数组大; 

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

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

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

7、空间分配方面: 
  数组在静态存储分配情形下,存储元素数量受限制,动态存储分配情形下,虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,而且如果内存中没有更大块连续存储空间将导致分配失败; 
  链表存储的节点空间只在需要的时候申请分配,只要内存中有空间就可以分配,操作比较灵活高效;

数组与链表的优缺点分析

数组和链表是存储数据的两种不同的结构。他们各有各的优缺点。 数组:        缺点:1.一旦数组定义,则大小固定,无法修改数组的大小。                   2.数组插入和删除...
  • u011456940
  • u011456940
  • 2015-11-15 21:03:02
  • 2160

数组和链表的优缺点比较

1)数组在内存中是逐个存放的,也就是说倘若数组的第一个元素在地址A,则数组第二个元素就在地址A+1。 而链表则不是,链表每个节点没有相对固定的位置关系。某个节点在地址A其后的节点不一定是A+1,而在...
  • u014596135
  • u014596135
  • 2016-03-19 20:33:04
  • 2120

数组与链表的优缺点和区别

1.数组: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要 在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加...
  • Mormont
  • Mormont
  • 2016-12-02 22:32:04
  • 7097

JAVA 数组,链表,树的基本概念与优劣。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • luojiusan520
  • luojiusan520
  • 2014-10-27 04:42:56
  • 577

数组与链表的异同(数据结构)

数组静态分配内存,链表动态分配内存; 数组在内存中连续,链表不连续; 数组元素在栈区,链表元素在堆区; 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 数组插入或删除元素的时...
  • rl529014
  • rl529014
  • 2016-04-16 19:44:09
  • 1114

从Java看数组和链表的区别

最近在学习数据结构,看了很多内容,总结了一下几点数组和链表的区别: 首先,二者都属于数据结构的范畴。 数组一旦初始化,长度就不能改变。链表长度可以改变,可以动态的增加节点数据,操作比较灵活...
  • u014672511
  • u014672511
  • 2015-07-16 14:45:07
  • 2719

数据结构的基本概念 与顺序表和链表的区别

通过该片文章你可以了解到数据结构的基本概念 与顺序表和链表的区别
  • chaoleshan
  • chaoleshan
  • 2017-07-14 11:15:22
  • 292

数组,栈,队列,链表的区别

数组:是随机存储的内存连续 栈:是先进后出的内存连续的 队列: 先进先出的内存连续 链表: 顺序存储的内存,可以不连续...
  • qianzhaotu
  • qianzhaotu
  • 2012-12-17 23:00:06
  • 354

数据结构之链表与数组(-)——数组和链表的简介

转自:http://www.cnblogs.com/lina1006/archive/2011/05/06/2039099.html  众所周知,在计算机中要对给定的数据集进行若干处理,首要任务是把...
  • song_hui_xiang
  • song_hui_xiang
  • 2015-07-24 10:32:16
  • 1087

链表,二叉树,哈希表,数组

数组:查找快,插入删除麻烦,用于已知的数据量;链表:查找慢,插入删除方便,用于较少的不可预知的数据量;哈希表:大数据量,利用散列函数结合数组和链表的优势。二叉树:同上。数组的搜索比较方便,可以直接用下...
  • liuhaijiao19880909
  • liuhaijiao19880909
  • 2017-07-21 18:02:06
  • 139
收藏助手
不良信息举报
您举报文章:[数据结构] 数组与链表的优缺点和区别
举报原因:
原因补充:

(最多只允许输入30个字)