数组和链表的区别

原文连接:http://blog.csdn.net/wangshihui512/article/details/9787699
程序员

数组:
数组

数组是将元素在内存中连续存放,因为每一个元素占用内存相同,能够经过下标迅速访问数组中任何元素。可是若是要在数组中增长一个元素,须要移动大量元素,在内存中空出一个元素的空间,而后将要增长的元素放在其中。一样的道理,若是想删除一个元素,一样须要移动大量元素去填掉被移动的元素。若是应用须要快速访问数据,不多或不插入和删除元素,就应该用数组。数据结构

链表
链表刚好相反,链表中的元素在内存中不是顺序存储的,而是经过存在元素中的指针联系到一块儿。好比:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。若是要访问链表中一个元素,须要从第一个元素开始,一直找到须要的元素位置。可是增长和删除一个元素对于链表数据结构就很是简单了,只要修改元素中的指针就能够了。若是应用须要常常插入和删除元素你就须要用链表数据结构了。


C++语言中能够用数组处理一组数据类型相同的数据,但不容许动态定义数组的大小,即在使用数组以前必须肯定数组的大小。而在实际应用中,用户使用数组以前有时没法准确肯定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而形成内存空间的浪费。链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。须要时能够用new分配内存空间,不须要时用delete将已分配的空间释放,不会形成内存空间的浪费。ide

(1) 从逻辑结构角度来看
   a, 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的状况。当数据增长时,可能超出原先定义的元素个数;当数据减小时,形成内存浪费。
   b,链表动态地进行存储分配,能够适应数据动态地增减的状况,且能够方便地插入、删除数据项。(数组中插入、删除数据项时,须要移动其它数据项)
  (2)从内存存储角度来看
   a,(静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小。

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

数组和链表的区别整理以下

数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续;
数组元素在栈区,链表元素在堆区;
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。
spa

相关文章
相关标签/搜索