1. 数据结构概述
数据结构是计算机存储、组织数据的方式。
研究的是某些数据元素(简称“元素”)之间的逻辑结构、物理结构以及他们之间的关系(逻辑关系、存储关系)。
2.数据的结构
数据结构可以从逻辑结构和物理结构两个方面进行分析。
2.1 逻辑结构
反映数据元素之间的逻辑关系,逻辑关系是指数据元素之间的前后件关系,与他们在计算机中的存储位置无关。
集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系
线性结构:数据结构中的元素存在一对一的相互关系
树形结构:数据结构中的元素存在一对多的相互关系
图形结构:数据结构中的元素存在多对多的相互关系
2.2 物理结构(存储结构)
数据的逻辑结构在计算机存储空间的存放形式。
数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可由多种存储结构实现。
3. 分类
从逻辑上可以分成“线性”和“非线性”
3.1 线性
所有数据元素在“一条线”上,每个元素最多只有一个直接前驱元素(他前边的都叫前驱,注意这里是直接前驱),最多只有一个直接后继元素。
3.2 非线性
所有数据元素不全在“一条线”上,每个元素可以有多个直接前驱元素,也可以有多个直接后继元素。
4. 抽象数据类型
数据类型
数据对象集(数据类型中的各种元素都是什么)
数据集合相关联的操作集(这个数据集有哪些操作,取某个元素?删除?创建?)
抽象:
描述数据类型的方法应该不依赖于具体如何实现。
与存放数据的机器无关
与数据存储的物理结构无关
与实现操作的算法和编程语言无关
抽象这个词只关心数据对象是什么,不关心它如何做到的。
5. 算法
算法定义:
算法是一个有限指令集
输入可有可无,但至少有一个输出。
一定是在有限步骤之后终止。
每一条指令必须明确。
描述算法必须抽象,不依赖于任何一种计算机语言及具体的实现手段。
5.1 什么是好的算法
5.1.1 衡量指标:
空间复杂度S(n)
时间复杂度T(n)
n是数据规模
在分析算法效率时,一般分析两钟复杂度
最坏情况复杂度Tworst(n)
平均复杂度Tavg(n)
5.1.2 复杂度的渐进表示
一般不做精确的复杂度分析,只需要知道一个大致的趋势即可,所以有了复杂度的渐进表示。
第一行,表示的是找到一个上界。
第二行,表示的是找到一个下界。
第三行,表示的是上下界相等。
5.1.3 复杂度变化曲线
5.1.4 一般的复杂度大小判断
- 两个算法顺序执行的话,复杂度取高的那个。
- 两个算法嵌套的话,就是两个算法的复杂相乘。
- for循环的时间复杂度为循环次数乘上循环体内的复杂度
- if-else 的时间复杂度去取以下三个部分中最高的那个
- 条件
- if 分支复杂度
- else 分支的复杂度