专升本复习资料(数据结构与C语言程序设计)
选自《C语言程序设计(第3版) 作者 苏小红等 高等教育出版社 与 《数据结构》(C语言版|第2版) 作者 严蔚敏等 人民邮电出版社
《数据结构》
数据结构的研究
-
通常用一个计算机解题的一个问题的步骤:具体抽象为**数学模型;**实质:分析问题;提取操作对象、找出操作对象之间的关系;用数学语言进行描述---->数据结构
-
设计算法;
-
编程、调试、运行
数据结构的研究内容
例题1:学生管理系统:
操作**对象:**每位学生的信息(学号、姓名、性别、籍贯、年龄···)
操作**算法:**查询、插入、修改、删除等。
操作对象之间的关系:线性关系 数据结构:线性数据结构、线性表。
文件系统的系统结构图
磁盘根目录下有很多子目录及文件,每个子目录里又可以包含多个子目录及文件,每个子目录只有一个父目录,以此类推。
该问题是一种典型的树型结构问题,数据与数据成一对多的关系,是一种典型的非线性关系结构------树形结构。
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。
基本概念和术语
-
数据
**数据是能输入计算机且能被计算机处理的各种符号的集合
- 信息的载体
- 是对客观事物符号化的表示
- 能够被计算机识别、存储和加工
包括:
- 数值型的数据:整数、实数等
- 非数值型的数据:文字、图像、图形、声音等
- 数据元素
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
也简称为元素,或称为记录、节点或定点。比如说学生表的一个数据条(学号、姓名、性别、出生日期、政治面貌等组成)就是一个数据元素。
- 数据项
数据项:构成数据元素的不可分割的最小单位。比如学生表里的数据元素里面的性别
数据、数据元素、数据项三者之间的关系:数据>数据元素>数据项;数据是由数据元素组成的,数据元素是由数据项组成的。
- 数据对象
数据对象是**性质相同的数据元素的集合,**是数据的一个子集。
例如:
-
- 整数数据对象是集合N ={0,+1,+2,+3,··· ···}
- 字母字符数据对象是集合C={‘A’,‘B’,‘C’··· ···‘Z’}
- 学籍表也可以看作是一个数据对象
数据元素与数据对象
- 数据元素--------组成数据的基本单位
- 与数据的关系:是集合的个体
- 数据对象--------性质相同的数据的集合
- 与数据的关系:集合的子集
数据结构
- 数据元素不是孤立的,它们之间存在着某种关系,数据元素相互之间的关系称为结构。
- 是指相互之间存在一种或多种特定关系的数据元素的集合。
- 或者说,数据结构是带结构的数据元素的集合
数据结构包括一下三个方面的内容:
- 数据元素之间的逻辑关系,也称逻辑结构;
- 数据元素及其关系在计算机内存中的表示(又称为映像),称为数据的物理结构或数据的存储结构。
- 数据的**运算和实现,**即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。
数据结构的两个层次:
-
逻辑结构
- 描述数据元素之间的逻辑关系
- 与数据的存储无关,独立于计算机的
- 是从具体问题抽象出来的数学模型
-
物理结构(存储方式)
- 数据元素及其关系在计算机存储器中的结构(存储方式)
- 是数据结构在计算机中的表示
-
逻辑结构与存储结构的关系
- 存储结构是逻辑关系的映像与元素本身的映像。
- 逻辑结构是数据结构的抽象,存储结构是数据结构的实现。
- 两者综合起来就建立了数据元素之间的结构关系。
-
逻辑结构的种类(划分方法不同,具体如下):
-
划分方法1:
-
线性结构
有且仅有一个开始和一个终端节点,并且所有节点都最多只有一个直接前趋和一个直接后继。
例如:线性表、栈、队列、串
-
非线性结构
一个结点可能有多个直接前趋和直接后继。
例如:树、图(网状图形结构)
-
-
划分方式2--------四类基本逻辑结构
- 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。
- 线性结构:结构中的数据元素之间存在一对一的线性关系。
- 树形结构:结构中的数据元素之间存在着一对多的层次关系。
- 图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。
-
-
存储结构的种类
-
四种基本的存储结构:
- 顺序存储结构
- 链式存储结构
- 索引存储结构
- 散列存储结构
顺序存储结构:
- 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。
- C语言中用数组来实现顺序存储结构。
链接存储结构:
-
用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。 指针:地址
理解:在;链式存储中,不仅存储了数据,还存储了下一个数据的地址。
-
C语言中用指针来实现链式存储结构
索引存储结构
- 在存储结点信息的同时,还建立附加的***索引表(Index)。***
- 索引表中的每一项称为索引项
- 索引项的一般形式是:(关键字,地址)
- 关键字是能唯一标识一个结点的哪些数据项。
- 若每个结点在索引表中都有一个索引项,则该索引表称为稠密索引。若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引。
散列存储结构
- 根据结点的关键字直接计算出该结点的存储地址。
数据类型和抽象数据类型
-
在使用高级程序设计语言编程时,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。
- 例如,C语言中:
- 提供int,char,float,double等基本数据类型
- 数组、机构、共用体、枚举、等构造数据类型
- 还有指针、空类型
- 用户也可用typedef自己定义数据类型
- 一些最基本数据结构可以用数据类型来实现,如数组、字符串等;
- 而另一些常用的数据结构,如栈、队列、树、图等,不能直接用数据类型来表示。
- 例如,C语言中:
-
高级语言中的数据类型明显地或隐含的规定了在程序执行期间变量和表达的所有可能的取值范围,以及在这些数值范围上所允许进行的操作。
-
例如:C语言中定义变量i为int型,就表示i是[-min,max] ((-32768,32767),这里表示的是16位机,如果32位的话是(-65536,65535))范围的整数,在这个整数集上可以进行+,-,*,/,%等操作。
-
数据类型的作用
- 约束变量或常量的取值范围
- 约束常量或变量的操作
**数据类型:**数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。
数据类型=值的集合+值集合上的一组操作
抽象数据类型:抽象就是抽取出实际问题的本质。
抽象数据类型:一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
抽象数据类型定义的格式如下:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据的类型名
算法:对特定问题求解方法和步骤的一种描述,他是指令的有限序列。其中,每个指令表示一个或多个操作。简而言之。算法就是解决问题的方法和步骤。
算法的描述:
- 自然语言:英语、中文
- 流程图:传统流程图、NS流程图
- 伪代码:类语言:类C语言
- 程序代码:C语言程序、java程序
-
练习题:
- 数据的基本单位是()。
A、数据元素 B、记录 C、数据对象 D、数据项
答案:A
- ()是数据的不可分割的最小单位。
A、数据对象 B、数据元素 C、数据类型 D、数据项
答案D
-
算法的空间复杂度是对算法()的度量。
A、时间效率 B、空间效率 C、可读性 D、健壮性
答案:B