数据结构回顾——线性表概念(顺序表与链表的区别)


1 线性表含义

   具有相同特性的数据元素组成的有限序列 称为线性表。线性表是最基本、最简单、使用最广的一种数据结构。


2 线性表特征

  • 集合中必存在唯一的一个“第一元素”

  • 集合中必存在唯一的一个“最后元素”

  • 除最后一个元素之外,均有唯一的后继

  • 除第一个元素之外,均有唯一的前驱

  • 逻辑结构简单,便于实现和操作


3 线性表组成

  线性表根据数据元素的存储结构类型分为顺序存储和链式存储,这两种类型分别对应于顺序表和链式表(链表)。顺序表组成的元素地址是连续,链表组成的元素地址是非连续的。链表又可以进一步分为单链表、双链表、循环链表、静态链表。


在这里插入图片描述

4 顺序表和链表

4.1 自身特点

  顺序表和链表特点对比对比。

顺序表 链表
存储地址 连续 非连续
存储空间 静态分配 通常为动态分配
存储密度 =1 <1
存取结构 随机存取和顺序存储 顺序存取
查找时间复杂度 O(1) O(n)
插入、删除时间复杂度 O(n) O(1)

  通过对比顺序表和链式表,两者的主要差别体现在存储结构上。

  顺序表的元素存储于一段连续的存储空间上,表现出来的特点是:

  • 通过索引号查找查找,效率高
  • 插入、删除效率低,因为需移动前后元素
  • 只存储有效数据,存储密度为1,存储利用率高
  • 通常使用静态内存分配,易出现浪费内存或者内存不够的场景,内存使用不灵活


    在这里插入图片描述
    顺序表存储结构

  链式表的元素存储空间是非连续的,表现出来的特点是:

  • 通过节点查找,效率较低。
  • 插入、删除效率高,无需移动元素,只需改变节点指针指向
  • 除了存储有效数据,还需存储节点地址关系信息,存储密度小于1
  • 通常使用动态内存分配,内存使用灵活性好


    在这里插入图片描述
    链表存储结构

4.2 适用场景

  通过对比线性表和链式表的特点,两者的优缺点互补,适用的场景也不一样。

线性表适用场景:

  • 经常性的查找静态操作
  • 线性表长度固定

链表适用场景:

  • 经常性的插入、删除动态操作
  • 线性表的长度不固定、变化大

4.3 衍生

  C语言下的顺序表(数组),是不支持动态内存分配的,因此,内存使用上不够灵活,表的长度也是固定的。在C++语言下,顺序表是支持可变长度的,即是支持动态内存分配。如STL的顺序容器<vector><vector>的原理是首先开辟一段内存用于存放元素集合;集合已满的情况下,当再新插入数据的时候,则分配一块更大的内存空间,并将原来的数据拷贝到该内存空间,接着释放之前申请的内存,最后插入新增的元素。

猜你喜欢

转载自blog.csdn.net/qq_20553613/article/details/108010894