数组和链表的区别

数组和链表的区别

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

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

   *C++语言中能够用数组处理一组数据类型相同的数据,但不容许动态定义数组的大小,即在使用数组以前必须肯定数组的大小。而在实际应用中,用户使用数组以前有时没法准确肯定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而形成内存空间的浪费。链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。须要时能够用new分配内存空间,不须要时用delete将已分配的空间释放,不会形成内存空间的浪费。
  (1) 从逻辑结构角度来看
     a, 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的状况。当数据增长时,可能超出原先定义的元素个数;当数据减小时,形成内存浪费。
     b,链表动态地进行存储分配,能够适应数据动态地增减的状况,且能够方便地插入、删除数据项。(数组中插入、删除数据项时,须要移动其它数据项)
  (2)从内存存储角度来看
     a,(静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小。
     b, 链表从堆中分配空间, 自由度大但申请管理比较麻烦.数组

 -----介绍的很详细,简单但有些地方容易忘,因此转过来和你们一块儿分享!数据结构

转自:http://www.cnblogs.com/FCWORLD/archive/2010/11/20/1882391.html spa

--------------------------------------------------------------------------------------------------------------------指针

备注:htm

我的理解,联想下生活中的例子便于理解记忆。blog

数组--->就像一列火车,有着车箱编号,每一节车箱里又有座位,座位也有编号,这就像二维数组。内存

              火车每一节之间是固定的,不便于拆分插入新的车箱,若是插入新的车箱,受影响的车箱都要更改编号,这很像                 修改数组的脚标。get

链表--->更像是咱们排队,只须要记住我在谁的后边,谁在个人后边就能够了。基于指针,方便插入、删除数据。但链表链接的内容能够在内存中不连续,由于依赖于指针。

相关文章
相关标签/搜索