数据结构与算法(一)基本概念和术语

239 阅读7分钟

本文内容参考自大话数据结构,转载请注明出处,未表明出处,发现必追究

一、数据、数据元素、数据项和数据对象

1. 数据(Data) :

数据是客观事物的符号表示,是计算机可以操作、并能被输入计算机程序处理的符号的总称。

举例 : 数学计算中的整数和实数、文本编辑中的字符串,也包括多媒体程序处理的图形、图像、声音及 动画等被特殊编码定义后的符号。

2. 数据元素(Data Element) :

是数据的基本单位,在计算机中通常作为一个整体被考虑和处理。有些情况下,也被称为元素和记录等。数据元素用于完整的描述一个对象。

举例 : 人类是数据,人就是数据元素,禽类是一个数据,猪马牛羊就是数据元素。

3. 数据项(Data Item) :

是组成数据元素的、有独立含义的、不可分割的最小单位。

举例 : 人类是数据,人是数据元素,人的姓名、年龄、性别、身高、体重等等信息都是数据项。

4. 数据对象(Data Object) :

是性质相同的数据元素的集合,是数据的一个子集。

什么叫性质相同?如果两个数据元素拥有相同数量和类型的数据项,那么它们两个就是性质相同。

举例 : 人类是数据、人是数据元素,人的基本信息是数据项,很多个人凑一起就可以视他们为数据对象。

二、数据结构

1. 概念

相互之间,存在一种或多种特定关系的数据元素的集合,叫做数据结构。

结构就是所谓数据元素间的关系,在计算机中,数据元素不是孤立存在的,它们明里暗里都会存在某种关联,而这些关联组合到一起,就是数据结构。

2.分类

数据结构大体分成两类 : 逻辑结构和物理结构。

1. 逻辑结构

是指数据对象中数据元素之间的逻辑关系。这个逻辑关系和数据的存储无关,是独立于计算机的。

就像从具体的问题中,抽象出来的数学模型。

逻辑结构有两个要素 : 数据元素关系

根据数据元素之间逻辑关系的不同特性,逻辑结构通常有四类基本结构,它们的复杂程度依次递进,分别是 :

  • 集合结构
  • 线性结构
  • 树结构
  • 图结构

集合结构

集合结构中的数据元素,除了同属于一个集合外,别无其它关系。各个数据元素之间是平等关系。

图1.png

如图1所示,外部的大圆形就是一个集合,内部1~9的数字都是数据元素,它们之间的关系只有同处在外部大圆这个集合中,相互之间是平等的,没有其它的关系,那么数字1~9在数据结构上就属于集合结构。

线性结构

线性结构中的数据元素,是一对一的关系。

图2.png

如图2所示,数字1~9都是数据元素,它们之间都是一对一的,没有多余的关系。

树结构

树结构中的数据元素,是一对多的层次关系。

图3.png

如图3所示,英文字母A~J都是数据元素,它们之间是一种一对多的关系。

图结构

图结构中的数据元素,存在多对多的关系。

图4.png

如图4所示,数字1~9都是数据元素,它们之间存在着多对多的关系。

逻辑结构总结

图5.png

2. 物理结构

又称存储结构。是指数据的逻辑结构在计算机中的存储形式。

把数据对象存储到计算机时,通常要求既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系,那么如何让数据的物理结构正确的反映元素之间的逻辑,就是很重要的事情。如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。

数据元素在计算机中的物理结构形式一般有两种 : 顺序存储结构链式存储结构

顺序存储结构

把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。

图片6.png

如图6所示,顺序存储结构,会直接开辟一块内存给到数据对象,这块内存直接就存储了各个数据元素之间的逻辑关系,并且,各数据元素在内存上的地址是按照顺序,连续分配这一块内存的。

链式存储结构

是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

图7.png

如图7所示,链式存储结构中,数据元素不一定是存储在连续的存储单元里的,所以数据元素之间的逻辑关系和存储单元的位置关系没有直接的联系,为了反映数据元素之间的关系,就需要用指针存放后续元素的存储地址,这样通过指针中的地址,就可以找到相关联元素的位置。

物理结构总结

物理结构是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

三、数据类型和抽象数据类型

1. 数据类型

数据类型是一组性质相同的值的集合及定义在此集合上的一些操作的总称。

数据类型是按照值的不同进行划分的,在高级语言中,每个变量、常量和表达式都有各自的取值范围,所谓类型,就是用来说明它们可以进行的操作的。

在C语言中,按照取值的不同,数据类型可以分为两类 :

  • 原子类型 : 是不可以再分解的基本类型,包括整型,实型、字符型。

  • 结构类型 : 由若干个类型组合而成,是可以再分解的。例如整型数组是由若干个整型数据组成的。

举例 :

例如在C语言中变量声明 int a int bint就声明了ab是整型,只能按照整型的取值范围和操作标准进行运算。

因为不同的计算机有不同的硬件系统,这就要求程序语言最终要通过编译器和解释器转换成底层语言,但是对于高级语言的开发者来说,我们并不在乎底层语言如何把高级语言的数据类型变成自己可识别的,也不在乎CPU为了运算一个操作进行了多少次的开关操作,所以我们需要将数据类型抽象出来。

2. 抽象数据类型

抽象数据类型是指一个数学模型及定义在该模型上的一组操作。英文Abstract Data Type,缩写ADT

我们对已有的数据类型进行抽象,就有了抽象数据类型。

抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。

例如 :

在一个坐标系里,坐标有x和y甚至z三种数值,这三种数值经常会一起出现,那我们就抽象出一个叫point的抽象数据类型,point有(x,y,z)三个整型变量,这样我们就可以很方便的操作point来获取一个点的坐标。

抽象数据类型体现了程序设计中问题分解、抽象、信息隐藏的特性,把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏。

描述抽象数据类型的标准格式 :

ADT 抽象数据类型名称

Data

  数据元素之间逻辑关系的定义
  
Operation
  
  操作1
  
    初始条件
    操作结果描述
    
  操作2
    
    ......
  
  操作n
    
    ......
    
endADT

四、总结

1. 数据中的基本概念

图片.png

2. 数据结构

图片.png

3. 数据类型

图片.png