今天看啥  ›  专栏  ›  MicroStone123

数据结构的定义(下):结构是什么

MicroStone123  · 简书  ·  · 2022-02-26 21:55

接上一节我们讲到什么是数据,不记得同学,可看看上一节的内容。我们今天来讲数据结构中的结构的定义。

image

结构?怎一看,有建筑结构,有书本目录结构等等,建筑结构表示建筑物内在物的各个组成部分的关系,目录目录结构表示书中每一章节的顺序,那么数据结构中的结构有表示什么呐?

我们来看看官方定义:相互之间存在一种或多种特定关系的数据元素的集合。顾名思义,数据相互之间的集合,当然肯定是两个或两个以上数据的关系,就一个数据,那来的关系,在计算机中,每个数据元素都是有意义的,不存在孤立的,杂乱无序的数据元素,每个数据之间都是有一定的内在联系。

每了编写出优秀的程序,我们必须处理好数据元素的特性及要处理对象之间的关系,这也是研究数据结构的真正意义所在。那么这些特定关系中都有哪些关系呐?

image

一、逻辑结构与物理结构

按照常规分类,我们把数据结构分为逻辑结构和物理结构,这个跟我们把事物分抽象跟具体一样。

结构是非常重要的,它既能节省空间又能提高计算机的运算速度,举个例子:假如给大家提供一个箱子用来装衣服,男同学不事先叠好衣服,直接把衣服丢进去,女同学先把衣服按大小,样式,相同款式的衣服叠起来,然后按照事先考虑好的摆放顺序装进箱子里,最后我看看,同样的空间,女同学装衣服的数量远远大于男同学,这也是一个结构的思维。

1.1、逻辑结构

定义:逻辑结构是指数据对象中数据元素之间的相互关系。,这个跟我们高中学习的集合等数学学到知识类,我们把逻辑结构分为四种:集合结构、线性结构、树形结构、图形结构。

(1) 集合结构

试想一下我们以前用到过的火柴(可能现在的90后或00后很少见过火柴,都是用打火机比较多),这些火柴看起来都一样的,没有任何区分,它们没有任何关系,每一根都是平等的。

image

这就是我们现在说的集合:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。每一个数据都是“平等”的,它们的共同属性是“同属于一个集合”。这个跟数学中的集合类似。如下图(圆内的每个数字都是无序平等的分布在圆内):

image
(2) 线性结构

线性结构在我们生活中经常遇到,比如我们在排队,它就是一种线性的结构

image

线性结构中的数据元素之间是一对一的关系。一前一后就是排队的关系。

(3) 树形结构

树形结构在我们生活中也比较常见,比如公司的组织关系,学校的组织关系。

image

上图中部门或员工之间存在一对或一对多的层次关系,层次关系是树形结构的一种较为重要的概念,其次是一对多,到处我们引出了数据结构中的树形结构的概念:树形结构中的数据元素之间存在一种一对多的层次关系

image
(4) 图形结构

在开始介绍图形结构前,我们来看看邓超跟孙俪的电影关系图

image

从图中我们可以看到邓超跟孙俪两人是夫妻关系,他们一起演过电影,又有各自主演的电影。

这种关系就是一个比较典型的图形结构,图形结构在图谱中比较流行使用,它是一种多对多的关系,它的定义是:图形结构的数据元素是多对多的关系

在画数据结构的逻辑结构时,需要注意两点:

  • 每个数据元素都是一个独立节点,用圆圈表示

  • 元素与元素之间的逻辑关系用连线表示,如果有方向,可以使用箭头表示、

1.2、物理结构

上面介绍了逻辑结构,现在我们来物理结构的定义(有些资料也称为存储结构,都是一回事,大家不要太在意)。物理结构:是指数据的逻辑结构在计算机中的存储形式

在计算机中,以何种方式把数据存储到计算机中的存储器,这就涉及到物理几个,存储器我们可以很好理解,比如硬盘,软盘,光盘,U盘等外部存储器,这些通常用户文件结构来描述存储结构。

数据的存储结构正确反映了数据元素之间的逻辑关系,这才是最为关键的,

数据元素的存储结构主要分为两种形式:顺序存储和链式存储。

(1) 顺序式存储结构

顺序式存储结构比较好理解一些:数据元素放在地址连续的存储单元里,数据的逻辑关系和物理关系是一样的。就跟围棋盘子一样。

image

这种结构相对来说比较简单,就是排队占位,都按照固定的顺序排好,每个人占一个空间,不插队。

(2) 链式存储结构

顺序式存储结构要求数据元素按顺序排序,不插队,不离队,一个处理完,直接到下一个,但实际排队的时候,总有人不按规矩来,排队离队的情况总会存在。这情况也在计算机中存在,有些数据需要删除也有需要插入的数据,这种情况顺序式存储结构是无法满足这个需求的,这时就引入了链式存储结构。

链式存储结构定义:链式存储结构把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。我们来看看下图。

image

在链式存储结构中,数据元素的存储关系并不能反映其逻辑关系,这时候需要一个指针(规定起点跟终点),数据元素只关心与我相关的元素就可以,比如前面跟后面(后面的都不需要太关心),这样通过指针指定的地址就可以找到相关联数据元素的位置。

这样看来,链式存储比顺序式存储灵活很多,同样的空间,顺序存储需要事先把所有的位置规划好,每个元素都要按照已经标注好的位置存放,是在几号位置就在几号位置,都已经安排好的。而链式存储只需要第一个元素知道了位置,其他的元素只需要知道前面的元素及对应的指针就行,存储的位置地址会告诉元素。

综上,逻辑结构是面向问题的,是为了接近问题,物理结构是面向计算机的,基本目标是将数据集及其逻辑关系存储到计算机的内存中。

二、抽象数据类型

2.1、数据类型

第一次接触抽象事物时都比较难以理解的,我们要需要多想象一下,多思考,每个名词的定义都是具备一定的规律,不会凭空想象的,比如我们定义书,定义动物,定义白电,黑电都是有一定的规划归类的。在数据类型中,我们也是这样定义的:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

相同性质的集合及操作,非单个数据元素,在数据结构中,数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就是用来说明变量或表达式的取值范围,和所能进行的操作。

当时设计计算机语言的前辈,为什么要考虑数据类型呐,搞那么复杂干嘛,就用一个名称来表示数字,一个符合表示操作不更好吗?现实中真的可以吗?我们来看看一个案例?

大家都想要住房子,当然越大越好,不同的人经济实力不一样,有钱人不可能跟我们黎民百姓一样去住平房,房地产商根据这种情况,就推出来满足不同阶层的房子,有普通上班族的普通商品房、有满足富豪的别墅,有单间,有错层的;有一百多平的,也有几十平的,甚至在一线城市还出现胶囊公寓。。这样就满足了不同人的需要。

在计算机中,内存也不是无限大的,假如你要计算简单的加减法,显然你开辟大量的内存空间,那就大材小用,浪费资源,

于是乎,我们根据数据进行分类,分出来多种数据类型。

java是强类型语言,所以java对于数据类型的规范会相对严格。本质上讲讲数据类型分为两种:

  • 基本类型:简单数据类型不能简化的、内置的数据类型,由编程语言本身定义的,表示真实的数字、字符和整数。

  • 引用类型:Java本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏

2.2、基本类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种逻辑型(布尔型)。俗称四类八种:

  • 第一类:四种整数型 byte short int long

  • 第二类:两种浮点型 float double

  • 第三类:一种逻辑型 boolean(它只有两个值可取true false)

  • 第四类:一种字符型 char

在栈中可以直接分配内存的数据是基本数据类型。

java中默认的整数类型是int类型,如果要定义为float型,则要在数值后加上l或L; 默认的浮点型也是双精度浮点,如果要定义为float型,则要在数值后加上f或F。

2.3、引用类型

在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)

简单的说,引用其实就像是一个对象的名字或者别名 (alias),一个对象在内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,我们不会直接是访问对象在内存中的数据,而是通过引用去访问。引用也是一种数据类型,我们可以把它想象为类似 C++ 语言中指针的东西,它指示了对象在内存中的地址——只不过我们不能够观察到这个地址究竟是什么。

如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定的内存空间(stack,栈空间)来保存。但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置.

Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。在这里我们就不展开讨论了。

image

三、今日总结

今天我们讨论了数据结构中结构的定义,我们需要掌握到什么是结构,什么是数据类型的知识,在以后需要用到的时候,我们能很好为归类及应用到它,

好了,今天就先介绍到这里,明天我们来讲解一下:数据结构俗话说—数据结构与算法的区别。




原文地址:访问原文地址
快照地址: 访问文章快照