数据结构--线性表及其逻辑和存储结构 no 3.
线性表(linear list)
线性表是n个类型相同数据元素的有限序列,通常记作(a0,a1,ai,…ai+1…an+1)。
1.相同数据类型
在线性表的定义中,我们看到从a0到an-1的n个数据元素具有相同的元素
比如说可以都是数字(A,B,C…Z);
当然也可以是具有更复杂结构的数据元素,例如学生,商品,装备。
相同的数据类型意味着在内存中存储时,每个元素会占用相同的内存空间,便于后续的查询定位。
2.序列
在线性表的相邻数据元素之间存在着序偶关系。
即ai+1是ai的直接前驱。则ai是ai+1的直接后继。
同时ai,又是ai+1的直接前驱,ai+1是ai的直接后续。
唯一没有直接前驱的元素a0一端称为表头。
唯一没有后续的元素an-1一端被称为表尾
除了表头和表尾元素外,任何一个元素都有且仅有一个直接前驱和直接后续。
3.有限
线性表中数据元素的个数n定义为线性表的长度,n是一个有限值。
当n=0时线性表为空表
在非空的线性表中每个数据元素在线性表中有唯一确定的序号,例如a0的序号是0,ai的序号是i。
在一个具有n>0个数据元素的线性表中,数据元素序号的范围是(0,n-1).++++
这里所有代码用Java实现:
线性表通常理解为Java中的Arrayist.,
为什么说查找数据快:
为什么说插入删除效率低:
插入:
删除:
链式存储结构:
数据元素的存储对应的是不联系的存储空间,每个存储节点对应一个需要存储的数据元素。
每个节点是由数据域和指针域组成。元素之间的逻辑关系通过存储节点之间的连接关系反映出来。
特点:
- 比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。
- 逻辑上相邻的节点物理上不必相邻
- 插入,删除灵活(不必移动节点,只要改变节点中的指针)
- 查找节点时链式存储要比顺序存储慢。
图示:
为什么说链表是插入删除效率高的,而查找效率不高,来看一下链表的逻辑结构:
插入数据:
删除查找数据问题: