28、线性表

应用程序中数据主要有四种基本的逻辑结构:

(1) 集合:数据元素之间只有“同属于一个集合”的关系。

(2) 线性结构:数据元素之间存在一个对一个的关系。

(3) 树形结构:数据元素之间存在一个对多个的关系。

(4) 图状结构或网状结构:数据元素之间存在多个对多个的关系。

对于数据不同的逻辑结构,底层通常有两种物理存储结构:

(1) 顺序存储结构;

(2) 链式存储结构。

1、线性表:

        线性表(Linear List)是由n(n>=0)个数据元素(节点)组成的有限序列。

        线性表中每个元素必须具有相同的结构(即拥有相同的数据项)。线性表是线性结构中最常用而又最简单的数据结构。线性表中数据元素不是数据值,一个数据元素可以包含多个数据项。

如:在员工信息表中,一个数据元素可以包含员工编号、员工姓名、员工年龄、员工学历等等。

2、线性表顺序存储结构

        顺序存储结构是指用一组地址连续的存储单元依次存放线性表中的元素。顺序结构线性表底层采用数组来存储数据元素。需要预先知道数据大小。

顺序表中每个元素都可随机存取,顺序存储的线性表是一种随机的存储结构。

3、线性表链式存储结构

        链式存储结构是指用一组地址任意的存储单元存放线性表中的元素。链式存储结构的线性表不会线性逻辑来存储数据元素,它在每一个数据元素里保存一个指向下一个数据元素的引用(指针)。

        链表在插入、删除数据元素时比顺序线性表快得多,但是查找一个节点或访问特定编号的节点则花费时间多。链表由于增加了节点的指针域,空间开销大。

3.1、单链表

动态建立单链表有两种方式:头插法建表和尾插法建表。

头插法建表:将数据元素存入节点的data域中,然后不断地以新节点为头节点,让新节点指向原有的头节点。

尾插法建表:将新节点插入链表的表尾,需要为链表定义一个引用变量来保存链表的最后一个节点。

头插法建表较简单,生成的链表中节点的次序和输入的顺序相反;尾插法建表稍复杂,但节点次序和输入顺序相同。

3.2、循环链表

将单链表的尾节点next指针改为引用单链表header节点,形成首尾相接的链表。

循环链表从任一节点出发均可找到表中的其他所有节点。

3.3、双向链表

双向链表具有对称性,每个节点既可以向前引用,也可以向后引用,指针具有双向性,更方便地插入、删除数据元素。

4、线性表分析

4.1、实现分析

线性表实现对比

顺序表链表
空间性能存储空间静态分布,需要一个长度固定的数组,总有部分数组元素浪费存储空间动态分布,空间不会被浪费,链表需要额外的空间来为每个节点保存指针,需牺牲部分空间
时间性能元素的逻辑顺序与存储顺序一致,支持随机存取,在查找、读取时性能很好插入、删除元素时性能较好
4.2、JDK提供线性表类图


LinkedList是双向链表。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值