shangyang

 线性表(linear list

           线性表是n个类型相同数据元素的有限序列,通常记作(a1,…,ai-1,ai,ai+1,…,an)。

  1.相同数据类型

    在线性表的定义中,线性表的n个数据元素具有相同的数据类型。

    比如都是数字,如(1,2,3,4,5);

    也可以都是字符,如(A,B,...,Z);

    还可以是具有更复杂结构的数据元素,如学生,图书,商品。

    相同的数据类型意味着在内存中存储时,每个元素会占用相同的内存空间,便于后续的查询定位。

  2.序列(有序性)

    在线性表的相邻数据元素之间存在着徐偶关系。

    即ai-1是ai的直接前驱,则ai是ai-1的直接后续,

    同时ai又是ai+1的直接前驱,ai+1是ai的直接后继。

    唯一没有直接前驱的元素a0一端称为表头,

    唯一没有直接后续的元素an一端称为表尾。

    除了表头和表尾元素外,任何一个元素都有且仅有一个直接前驱和直接后继。

  3.有限

    线性表中数据元素的个数n定义为线性表的长度,n是一个有限值。

    当n=0时线性表为空表。

    在非空的线性表中每个数据元素在线性表中都有唯一确定的序号,如a0的序号是0,ai的序号是i。

    在一个具有n>0个数据元素的线性表中,数据元素序号的范围是[0,n-1]。

 线性表的逻辑结构

 

线性表的存储结构

  1.顺序表-------顺序存储结构

    

    特点:在内存中分配连续的空间,只存储数据,不需要存储地址信息,位置就隐含着地址。

    优点:

      1.节省存储空间,数据是连续存放的,命中率比较高。

      2.索引查找效率高,即一个结点对应一个序号,由该序号可以直接计算出结点的存储地址。

          假设线性表的每个数据元素需占用K个存储单元,并以元素所占的第一个存储单元的地址作为数据元素的存储地址。

          线性表的i号元素ai的存储地址为

            LOC(ai) = LOC(a0) + i*K

          其中LOC(a0)为0号元素a0的存储地址,通常成为线性表的起始地址。

 

    缺点:

      1.插入和删除操作需要移动元素,效率较低。

      2.必须提前分配固定数量的空间,如果存储元素少,可能导致空闲浪费。

      3.按照内容查询效率低,因为需要逐个比较判断。

    时间复杂度 :查找操作为O(1) ,插入和删除操作为O(n)。

  2.链表------链式存储结构

      

    特点:该线性表中的数据元素可以用任意的存储单元来存储。线性表中逻辑相邻的两元素的存储空间可以是不连续的。

      每个结点是由数据域和指针域组成。元素之间的逻辑关系通过存储节点之间的链接关系反映出来。

      逻辑上相邻的节点物理上不必相邻。

    优点:

      1.插入、删除灵活,不必移动节点,只需改变指针指向即可。

      2.不用事先开辟内存,有元素才会分配内存空间。

      3.内存利用率较高。

    缺点:

      1.比顺序存结构的存储密度小(需占用额外的空间存储指针,比较浪费空间)。

      2.查找结点时链式存储要比顺序节点慢(每个节点地址不连续,查找时需循环链表)。

    时间复杂度 :查找操作为O(n) ,插入和删除操作为O(1)。

相关文章: