线性表(linear list

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

  1.相同数据类型

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

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

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

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

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

  2.序列(有序性)

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

    即a是a的直接前驱,则a是a的直接后续,

    同时a又是a的直接前驱,a是a的直接后继。

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

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

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

  3.有限

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

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

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

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

 线性表的逻辑结构

学习笔记---线性表-LMLPHP

线性表的存储结构

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

    学习笔记---线性表-LMLPHP

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

    优点:

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

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

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

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

            LOC(a) = LOC(a) + i*K

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

    缺点:

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

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

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

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

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

      学习笔记---线性表-LMLPHP

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

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

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

    优点:

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

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

      3.内存利用率较高。

    缺点:

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

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

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

03-06 06:29