数据结构与算法基础——链表相关

名词解释—链表:

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

数组和链表的区别:

  • 逻辑结构上:
      在C/C++等语言中,使用数组时必须提前确定好长度,也就是不允许动态的创建数据,但在实际的开发中,我们却经常不能提前确定数组的长度,从而造成了资源在一定程度上的浪费。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
      链表是一种常见的数据组织形式,他采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,在某些使用场景下,可以更合理的利用资源。可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素
  • 内存分配上:
      数组从栈中分配空间(用new则在堆上创建),对程序员方便快速,但是自由度小;
      链表从堆中分配空间,自由度大但是申请管理比较麻烦。
  • 访问形式上:
      数组在内存中是连续的存储,因此可以利用下标索引进行访问;
      链表是链式存储结构,在访问元素时候只能够通过线性方式由前到后顺序的访问,所以访问效率比数组要低。
  • 使用场景上:
      如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;
      如果需要经常插入和删除元素就需要用链表数据结构了。

你可能感兴趣的:(数据结构,算法,链表,数据结构与算法)