《数据结构》复习总结——绪论

绪论,作为本学科的概述,一共讲了两个东西:数据结构和算法。

接下来先看数据结构,什么是数据结构?这也是之前提出的一个问题。先给出定义:数据结构是有关系(一种或多种关系)的数据元素的集合,什么意思?感觉很茫然,不急。接着往下看,说到数据结构,不妨将其分为“数据”和“结构”,分开来看。数据,the carrier of information. 它是信息的载体,即通过数据我们可以获取到信息。为了更好地理解数据,这里给出三个概念,数据元素、数据对象和数据类型。下面这一个是一个信息表,我们通过这个表来更加具体,更加确切地理解这三个概念。

数据元素,数据的基本单位,也就是说可以通过数据元素,我们可以获取到一个完整的信息。比如说小明排名第一,这个就是一个数据元素。通过这个数据元素我们可以获知小明是排名第一。数据对象是具有相同性质的数据元素的集合,具有相同性质的,比如说小明、小军,这些姓名他们具有相同性质,都是姓名,所以把他们称为一个数据对象。

数据类型,像这里的姓名,就是一个数据类型,排名是一个数据类型。我们知道:“姓名”在高级语言定义中,用字符串定义 String,排名可以用 int 定义。这里又可以把数据类型分为原子类型、结构类型,还有抽象数据类型。原子类型就是其值不可再分,像int型,它的值不可再分。像我们把姓名排名这样一个数据元素定义为一个结构类型的话,那么它的值可以分为姓名还有排名。

理解了数据以后,接下来看结构。

对于所谓的结构,我们可以从两个角度来理解,一个是逻辑结构,一个是存储结构。

逻辑结构是从逻辑上描述数据,也就是以人的逻辑思维角度可以抽象理解的角度;

存储结构是研究数据在实际计算机上如何存(物理上)的描述;

逻辑结构它是独立于存储结构的。

以逻辑结构的角度可以把所有的数据结构分为两类,一类是线性的,一类是非线性的。前者包括线性表、栈、队列和串,后者包括集合、树和图,关于这些数据结构这里不作具体的阐述,后面的章节会一一详细总结,这里只分类即可。

接下来就是如何将这些理解后的数据存储到机器中,这就用到了另一个角度:存储结构。在存储中既要存数据元素,还要存元素之间的关系。

这里我们将存储结构分为4种,顺序存储、链式存储还有索引以及散列存储。我们常用的是顺序和链式存储。在后续各章的数据结构学习中,我们都会研究其顺序存储和链式存储。

顺序存储是用相邻的一整块存储单元进行存储,其逻辑上相邻的元素在物理位置上也相邻,所以它可以随机存取。而链式存储,采用的是离散的任意的存储单元进行存储数据元素,并借助指针表示元素之间的逻辑关系,所以只能顺序存取,而且指针会占用一定的空间,所以其存储密度小。这是两个主要的存储方式。

接下来看索引存储,需要建立一个索引表(类似于一本书的目录),通过这个索引表,我们可以很快的进行检索。但是索引表会占用一定的空间。散列存取,是根据数据元素的关键字直接计算出元素的存取地址,这样的方式可以方便检索和增删。但这里涉及到一个散列函数,如果散列函数选择不适合,它会在元素存储的时候会发生冲突。至此我们通过从数据和结构分开来理解,我们已经知道《数据结构》是研究数据如何抽象理解?如何高效存储?如何操作?“三如何”的一门学科,所以可以回答:数据结构 = 数据逻辑 + 数据存储 + 数据操作(也称运算)。因此这三部分也称为数据结构的三要素。

了解数据结构之后,我们来看算法。我们先看定义:算法是对问题求解步骤的描述。

它有5个特性需要我们理解:
一、有穷性,也就是它的步骤需要是有限个步骤,不能是无穷多个;
二、确定性,他的他的每一步需要确切的含义,不能有歧义;
三、可行性,就是它的算法可执行;
四、含有零个或多个输入;
五、含有一个或多个输出。

接下来是一个考点:度量。如何度量算法,这是算法在应用中被着重考虑的一个方面。
在度量上我们分为所耗时间上的度量,称为“时间复杂度”,还有所占空间上度量,称为“空间复杂度”。

之前讲:《数据结构》是研究一个如何在计算机上高效的存储数据的一门学科。所以高效是我们评判一个算法很坏的标准。这里高效它既指时间上的高效,也指空间上的高效,用时短,占用空间小,就说它是一个优秀的算法。

至此第一章总结结束。

讲解视频已同步到 B站:《数据结构》复习总结
欢迎大家的光顾与交流。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部