您的位置:首页 > 理论基础 > 数据结构算法

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

2017-09-20 22:42 253 查看

1.定义:

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

可以是有序的也可以是无序的,

2.线性表的逻辑特性

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

3.线性表的存储结构

1.顺序表

顺序表中的所有元素按照其逻辑顺序,一次存储到存储器中从指定存储位置开始的一块连续的存储空间中。

特点

随机访问特性

即顺序表要求占用连续的存储空间

存储分配只能预先进行,即 静态分配,一旦分配好了,在对其操作过程中不变。

在顺序表中插入时,需要移动元素

2.链表

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

-特点

必须从头访问,不支持随机访问。

因为有一部分要存储指针信息,所以链表中 结点的存储空间利用率较之顺序表稍低一些。

链表中的节点散落的分布在存储器中,所以链表支持存储空间的动态分配,需要时再划分。

链表插入时,不需要移动元素。

链表有五种形式

单链表可分为带头结点,和不带头结点两种,前者第一个节点不存储信息,只作为标记,后者所有结点都存储信息,两种情况下,头指针都指向头结点

双链表,即节点存储了指向前驱的指针。

循环单链表,最后一个结点的指针指向链表中的第一个结点。

带头结点的循环单链表当head等于head->next;时链表为空;不带头结点的循环单链表当 head 等于 NULL 时链表为空

循环双链表

带头结点的循环双链表当head->next和head->prior两个指针都等于head时链表为空,不带头结点的循环双链表当head等于NULL的时候为空。

静态链表。

区别总结

(1 )基于空间的比较:

存储分配的方式:

顺序表的存储空间是静态分配的。

链表的存储空间是动态分配的。

存储密度( 存储密度= 结点数据域所占的存储量/ 结点结构所占的存储总量) :

顺序表的存储密度 =1。

链表的存储密度<1 (因为结点中有指针域)。

(2 )基于时间的比较:

存取方式:

顺序表可以随机存取,也可以顺序存取

链表是顺序存取的。

插入/ 删除时移动元素个数:

顺序表平均移动近一半元素。

链表不需要移动,只需要改变指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 线性表