Java 数据结构与算法_1. 概述_数据结构

数据结构, 本质上就是用来存储和组织数据的集合.

就好比在Java语言里面学习的array, list,  map等等这样的对象, 都是数据结构.

 

数据结构的分类,从总体上会把数据结构分为两大类,逻辑结构和物理结构两大类.

逻辑结构是按照 数据与数据 之间的关系进行分类的,它是一种抽象意义上的分类.

而物理结构, 是从计算机的存储角度进行分类.

 

逻辑结构

逻辑结构的分类,逻辑结构总体上分为4类, 分别有集合结构,线性结构,树形结构,还有图形结构,

这四种结构之间区别重点在于不同的结构,所存储的数据元素, 是按照不同的关系进行分类的.

集合结构,在这个集合结构中, 存储了123456789这9个元素,那么这9个元素, 除了共同属于同一个集合之外,没有任何其他的关系,这就是集合结构.

 

线性结构中, 数据元素与数据元素之间存在着1对1的关系,就好比1对应着2, 2对应着3, 3 对应着4, 4对应着5,是一对一的关系.

 

树形结构中,数据元素和数据元素之间,是有一对多的关系.

比如说A这个元素对应着BCD这三个元素.

而B这个元素又对应着EFG这三个元素,是一对多的关系.

 

在图形结构中, 数据元素之间存在着多对多的关系.

就好比5这个元素,对应着2379这多个元素.

而反过来说,5这个元素又同时被2379的多个元素所对应, 是多对多的关系.

 

这就是逻辑结构的一个分类,总体上是按照数据元素与数据元素之间的关系进行分类的.

物理结构

物理结构 是 逻辑结构 在计算机中真正的表示方式,.

逻辑结构是抽象意义上的一个分类, 逻辑结构按照不同的关系把数据存储起来之后,逻辑结构最终是需要在计算机上存储数据的,此时就要用到物理结构.

 

物理结构可以分为两类,一类是顺序结构,一类是链式结构.

顺序结构, 最常用的顺序结构就是数组.

顺序结构的特点是,它的数据单元所占用的内存地址是连续的,每一个数据单元与数据单元,对应的位置是有索引的.

比如, 1对应着0 索引, 2 对应着1索引, 3对应着2索引.

这样的顺序存储结构, 它的优点是, 因为它具有索引,因此当要访问集合中的某个元素,只要知道它的索引, 很快就会找到某个元素.

比如要找到4这个元素,只要通过数组来访问它的索引3即可找到.

这样的顺序结构也有弊端,比方说,现在需要在3和4这两个元素之间插入18这个元素, 顺序存储结构的存储单元之间的内存地址是连续的,那么在3和4之间, 就不存在一个空余的内存地址来存存储18.

如果要把18存进去, 就需要把456789这多个元素分别向后移动一位,然后呢,把4这个位置空出来,空出来之后再把18放进去,那么这样很明显,性能是不太好的.

因为要存一下或者要插入一个18, 要把后边的元素都得移动一遍,因此呢,插入效率不是很高,那为了这个解决这个问题,就要用到链式存储结构.

 

链式结构:

 

链式存储结构的特点是, 链式存储结构的内存单元, 可以是连续的, 也可以是不连续的.

因为是不连续的,所以引入一个指针的概念去访问集合中的某个元素.

让集合中的数据单元与数据单元之间, 用指针来进行指向,比方说元素1指向元素2, 元素2指向元素3.

当指完了之后,如果要访问集合中的某个元素,比方说要访问4这个元素,那么只要从1开始找,通过1, 可以找到2, 通过2可以找到3, 通过3可以找到4.

很明显, 链式存储结构,查找的效率没有顺序存储结构查找效率高.

但是, 如果要在3和4之间插入18这个元素,链式存储结构,它的内存地址不是连续的,因此呢,可以任意找一个内存单元, 把18存起来,存起来之后, 只需要让3和4之间的链接断掉,然后再让3指向18, 让18 指向4,这样就可以完成18这个插入操作.

因此, 链式存储结构的插入操作是要比顺序存储结构的插入操作效率是要高的.

顺序存储结构和链式存储结构不存在哪个好哪个坏一说, 在真正的使用场景中, 需要根据不同的需求来选择不同的结构.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值