数据结构与算法之线性表(一)
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 )基于时间的比较:
存取方式:
顺序表可以随机存取,也可以顺序存取
链表是顺序存取的。
插入/ 删除时移动元素个数:
顺序表平均移动近一半元素。
链表不需要移动,只需要改变指针。
相关文章推荐
- 数据结构与算法14:线性索引查找
- 数据结构与算法2:线性结构与线性表-顺序表
- 数据结构与算法之线性表
- 数据结构与算法——线性表的顺序表示
- 数据结构课程要求算法--线性表(1.创建和删除)
- [数据结构与算法]第一周(一):线性表---多项式加法&&字符串插入
- 【数据结构与算法】浅析线性递归和尾递归
- c/c++常用算法(1) -- 数据结构(线性表的顺序存储)
- 算法与数据结构之线性结构的相关知识,简单易懂。
- 数据结构与算法_1:线性表顺序存储结构常见操作
- 【数据结构与算法】基本数据结构——线性表的链式表示
- 求最大连续子序列之和的线性算法 c# 数据结构
- 【数据结构作业一】写出顺序表的结构体类型定义及查找、插入、删除算法,并以顺序表作存储结构,实现线性表的插入、删除
- 数据结构与算法之线性结构
- 数据结构与算法之散列(线性/平方/双平方探测法)<八>
- 数据结构与算法学习笔记02_1(线性表)
- 数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )
- 【线性表二:】大学数据结构实验报告中的两三个关于线性表的小算法
- 线性表5 – 数据结构和算法10
- Java数据结构与算法—及实现 线性表 顺序表、链表、栈、队列详解