数组和链表

链表

链表是一种常见的数据组织形式,它采用动态分配内存的方式实现。须要时能够用new分配内存空间,不须要时用delete将已分配的空间释放,不会形成内存空间的浪费。
 程序员

区别 

从逻辑结构来看

  • 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的状况。当数据增长时,可能超出原先定义的元素个数;当数据减小时,形成内存浪费。
  • 链表动态地进行存储分配,能够适应数据动态地增减的状况,且能够方便地插入、删除数据项。(数组中插入、删除数据项时,须要移动其它数据项)

从内存存储来看

  • (静态)数组从栈中分配空间,对于程序员方便快速,可是自由度小。
  • 链表从堆中分配空间,自由度大可是申请管理比较麻烦。
  • 数组中的数据在内存中的按顺序存储的,而链表是随机存储的!
  • 要访问数组中的元素能够按下标索引来访问,速度比较快,若是对他进行插入操做的话,就得移动不少元素,因此对数组进行插入操做效率很低!
  • 因为链表是随机存储的,链表在插入,删除操做上有很高的效率(相对数组),若是要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所须要的元素为止,因此链表的随机访问的效率就比数组要低。
  • 数组在内存中开辟连续的一块区域,若是一个数据要两个内存单元,一组5个数据10个单元就够了,无需标记其地址,由于数组定义时候标顶了第一个原许的地址,其余四个都知道了。
  • 链表可能够是连续的,也能够是不连续的,但通常都是不连续的,尽管在内存中是连续的,咱们也不把他看成是连续的,而是把他看成是不连续的,由于若是把他看成是连续的,不如看成是数组了,在某些状况下。一链5个数据,若是每一个数据自己用2个内存单元,那么10个单元是不够的,由于每一个数据都要表示出下个数据在哪里,因此一个数据自己用2个单元,再用1个单元表示此链下一个数据在什么地址。
相关文章
相关标签/搜索