数据结构与算法之线性表(一)

来源:互联网 发布:移动80端口 编辑:程序博客网 时间:2024/06/07 12:05

1.定义:

  • 线性表是具有 相同特性 数据元素的一个有限序列,该序列中所包含的元素的个数叫做线性表的长度,用n表示(n>=0),当n等于0时线性表是一个空表。
  • 可以是有序的也可以是无序的,

2.线性表的逻辑特性

  • 这个有限序列的第一个没有前驱(前面没有数据元素),最后一个无后继(后面没有数据元素),其他的数据元素只有一个直接前驱,和一个直接后驱。

3.线性表的存储结构

1.顺序表

  • 顺序表中的所有元素按照其逻辑顺序,一次存储到存储器中从指定存储位置开始的一块连续的存储空间中。
  • 特点
    1. 随机访问特性
    2. 即顺序表要求占用连续的存储空间
    3. 存储分配只能预先进行,即 静态分配,一旦分配好了,在对其操作过程中不变。
    4. 在顺序表中插入时,需要移动元素

2.链表

  • 在链表存储中,每个结点不仅包含所存元素本身的信息,还包含前驱结点包含后继结点的地址信息,这样就可以方便的找到前驱和后继的位置。
    -特点

    1. 必须从头访问,不支持随机访问。
    2. 因为有一部分要存储指针信息,所以链表中 结点的存储空间利用率较之顺序表稍低一些。
    3. 链表中的节点散落的分布在存储器中,所以链表支持存储空间的动态分配,需要时再划分。
    4. 链表插入时,不需要移动元素。
  • 链表有五种形式

    1. 单链表可分为带头结点,和不带头结点两种,前者第一个节点不存储信息,只作为标记,后者所有结点都存储信息,两种情况下,头指针都指向头结点
    2. 双链表,即节点存储了指向前驱的指针。
    3. 循环单链表,最后一个结点的指针指向链表中的第一个结点。
  • 带头结点的循环单链表当head等于head->next;时链表为空;不带头结点的循环单链表当 head 等于 NULL 时链表为空
    1. 循环双链表
  • 带头结点的循环双链表当head->next和head->prior两个指针都等于head时链表为空,不带头结点的循环双链表当head等于NULL的时候为空。
    1. 静态链表。

区别总结

(1 )基于空间的比较:
存储分配的方式:
顺序表的存储空间是静态分配的。
链表的存储空间是动态分配的。
存储密度( 存储密度= 结点数据域所占的存储量/ 结点结构所占的存储总量) :
顺序表的存储密度 =1。
链表的存储密度<1 (因为结点中有指针域)。
(2 )基于时间的比较:
存取方式:
顺序表可以随机存取,也可以顺序存取
链表是顺序存取的。
插入/ 删除时移动元素个数:
顺序表平均移动近一半元素。
链表不需要移动,只需要改变指针。

原创粉丝点击