目录
[1.2 逻辑结构](#1.2 逻辑结构)
[1.3 物理结构(存储结构)](#1.3 物理结构(存储结构))
[1.4 逻辑结构与数据结构的关系](#1.4 逻辑结构与数据结构的关系)
[1.5 数据类型和抽象数据类型](#1.5 数据类型和抽象数据类型)
[1.5.1 数据类型](#1.5.1 数据类型)
[1.5.3 抽象数据类型](#1.5.3 抽象数据类型)
[2 算法及其描述](#2 算法及其描述)
[2.1 算法的定义](#2.1 算法的定义)
[2.2 算法设计的目标](#2.2 算法设计的目标)
[2.3 算法的描述](#2.3 算法的描述)
[3. 算法分析](#3. 算法分析)
[3.1 算法的时间性能分析](#3.1 算法的时间性能分析)
[3.1.1 两种衡量算法时间性能的方法](#3.1.1 两种衡量算法时间性能的方法)
[3.2 算法的空间性能分析](#3.2 算法的空间性能分析)
1、什么是数据结构
1.1数据结构的定义
数据(data):数据是描述客观 事物的数 和字符集合。
- 是能够输入计算机且能被计算机处理的各种符号的集合。
- 信息的载体
- 是对客观事物的符号化的表示
- 能够被计算机识别、存储和加工
- 包括:
- 数值型的数据:整数、实数等。
- 非数组型的数据:文字、图像、图形、声音等。
数据元素:是数据的基本单位 。(例如:学生表的一行信息即一个同学的信息,包括:学号、姓名、性别等)。一个数据元素由若干个数据项组成。数据元素也称为元素、结点、顶点或者记录。

数据项(data item):构成数据元素的不可分割的最小单位。 也称为字段 或域

数据、数据元素、数据项三者之间的关系:
数据 > 数据元素 > 数据项
例如:学生表 > 个人记录 >学号、姓名。
数据对象(data object):数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据元素和数据对象的关系:
- 数据元素------组成数据的基本单位
- 与数据的关系:是集合中的个体。
- 数据对象------性质相同的数据元素的集合
- 与数据的关系:集合中的子集
数据结构(data structre):是指所有数据元素与数据元素之间的关系,可以看做相互之间存在的某种特定关系的数据元素集合。
数据结构通常包括以下三个方面的内容:
- 数据元素之间的逻辑关系,也称为数据的逻辑结构: 由数据元素之间的逻辑关系构成**。**
- 数据的存储结构:数据元素及其关系在计算机存储器上的存储表示,也称为数据的物理结构。
- 数据的运算:施加在数据上的运算。
1.2 逻辑结构
- 描述数据元素之间的逻辑关系
- 与数据的存储无关,独立于计算机
- 是从具体问题抽象出来的数据模型
1.2.1逻辑结构的种类(类型)
划分1:
1).线性结构
数据元素之间存在一对一的关系,有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继
例如:线性表、栈、队列、串
2).非线性结构
一个结点可能有多个直接前趋和直接后继
例如:树、图
划分2:
1). 集合
集合(set)是指数据元素之间除了"同属于一个集合"的关系以外别无其他关系。
2)线性结构:
数据元素之间存在着一对一的线性关系。
3).树形结构
数据元素之间存在一对多的关系
4).图形结构(网状结构)
数据元素之间存在多对多的关系
1.3 物理结构(存储结构)
- 数据元素 及其关系在计算机存储器中的结构(存储方式)
- 是数据结构在计算机中的表示
1.3.1存储结构的种类
顺序存储结构
- 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。
- C语言中用数组来实现顺序存储结构
链式存储结构
- 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。
- C语言中用指针来实现链式存储结构
索引存储结构
- 在存储结点信息的时候,还建立附加的索引表
优点:查找时间快。
缺点:增加了开辟的空间。
哈希(或散列)存储结构
- 根据结点的关键字直接计算出该结点的存储地址。
1.4 逻辑结构与数据结构的关系
- 逻辑结构是 逻辑关系的映像与 数据本身的映像
- 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
- 两者综合起来建立了数据元素之间的结果关系。
1.5 数据类型和抽象数据类型
1.5.1 数据类型
- 在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型 。
- 例如,C语言中:
- 提供int、 char、double等基本数据类型
- 数组、结构、共用体、枚举等构造数据类型
- 还有指针、空指针类型
- 用户也可以用typedef 自己定义数据类型。
- 例如,C语言中:
- 一些基本数据类型可以实现数组、字符串等。
- 而另一些常用的数据类型、如栈、队列、树、图、不能直接用数据类型来表示。
数据类型(data type):数据类型是一组性质相同的值的集合 以及定义于这个值集合上的一组操作的总称。
数据类型 = 值的集合 + 值集合上的一组操作
1.5.2存储空间分配
我们之前已经掌握的内存开辟方式有:
int val = 20; //在栈空间上开辟四个字节
char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间
但是上述的开辟空间的方式有两个特点:
1、空间开辟大小是固定的。
2、数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。
1.5.3 抽象数据类型
- 首相数据类型是指一个数据吗模型以及定义在此数据模型上的一组操作。
- 由用户定义,从问题抽象出数据模型(逻辑结构)
- 、还包括定义数据模型上的一组抽象运算(相关操作)
- 不考虑计算机内的具体存储结构与运算的具体实现算法
抽象数据类型的形式定义:

抽象数据类型的基本描述格式:
ADT 抽象数据类型名{
数据对象:数据对象的声明 //使用D表示数据对象
数据关系:数据关系的声明 //R表示D上的关系集
数据运算:数据运算的声明 //P表示D中数据运算的基本运算集
}
其中,基本运算的声明格式为:
基本运算名(参数表):运算功能描述
2 算法及其描述
2.1 算法的定义
算法:是对特定问题求解和步骤 的一种描述,它是指令 的有限序列。其中每个指令表示一个或多个操作。
算法和程序:
- 算法是解决问题的一种方法或一个过程,考虑如何将输入传换成输出,一个问题可以有多种算法。
- 程序是 某种程序设计语言 对算法的具体实现

算法的5个特性

2.2 算法设计的目标



2.3 算法的描述
描述算法的方式有很多种,可以采用自然语言伪码、伪代码,流程图、计算机语言C/C++语言等。
3. 算法分析

3.1 算法的时间性能分析
3.1.1 两种衡量算法时间性能的方法



3.1.2算法的时间复杂度分析















3.1.3算法的最好、最坏和平均时间复杂度



算法时间复杂度的比较:

3.2 算法的空间性能分析


