读《大话数据结构》笔记。
1.数据结构概念
数据-数据元素(记录)-数据项
数据对象:性质相同的数据元素的集合,是数据的子集。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
按照视点(?)的不同,数据结构分为逻辑结构和物理结构。
逻辑结构:数据对象中的数据元素的相互关系。逻辑结构分为集合结构、线性结构、树形结构、图形结构。
物理结构(也叫存储结构):数据的逻辑结构在计算机中的存储形式。数据元素的存储结构形式主要有两种:顺序存储和链式存储。
顺序存储结构:把数据元素存储在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
链式存储结构:把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系不能反映逻辑关系,需要用一个指针存放数据元素的地址。
逻辑结构是面向问题的,物理结构是面向计算机的,其目标是将数据及逻辑关系存储到计算机的内存当中。
数据类型:一组性质相同的值的集合及定义在此集合上的操作的总称。整型、浮点型、字符型……
抽象数据类型:一个数据模型以及定义在该数据模型上的一组操作。
2.算法
算法(描述解决问题的方法)是解决特定问题的求解步骤的描述,在计算中表现为指令的有限序列,并且每条指令都表示一个或多个操作。
算法的五个特性:输入、输出、有穷性、确定性、可行性。
算法设计要求:正确性、可读性(易理解)、健壮性、高效率、低存储。
算法效率度量方法:事后统计方法(弃用)、事前分析估算方法。
算法时间复杂度:
算法空间复杂度:通过计算算法的所需存储空间实现,S(n) = O(f(n)),其中n为问题规模,f(n)为语句关于n的所占存储空间的函数。
3.线性表
零个或多个数据元素的有限序列。排队的必须是相同类型的数据!
线性表的元素个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。
线性表的顺序存储结构、链式存储结构
单链表、循环链表、双向链表;静态链表
4.栈与队列
栈是限定在表尾(栈顶)进行插入和删除操作的线性表。(后进先出,last in first out,LIFO结构)
队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表。(先进先出,first in first out,FIFO)
递归例子:斐波那契数列(Fibonacci)
递归函数:直接或间接调用自己的函数
栈用于四则运算表达式求值。1、将中缀表达式转换成后缀表达式。2、将后缀表达式进行运算得出结果。
循环队列
5.串
零个或多个字符组成的有限序列,也叫字符串。
串的比较:通过组成串的字符之间的编码来进行比较,而字符的编码是指字符在对应字符集中序号。
KMP
6.树
树是n(n >= 0)个结点的有限集。n=0时,称为空树。
根结点、内部结点、叶结点
子树
森林是m(m >=0)颗互不相交的树的集合。
二叉树特点:1、每个结点最多只有两颗子树;2、左子树、右子树顺序不能颠倒。3、即使某结点只有一个结点,也要区分是左子树还是右子树。
树的遍历:前序遍历、中序遍历、后序遍历、层序遍历
7.图
图是由顶点的非空有穷集合和顶点之间边的集合组成,表示为G(V,E),其中G表示为一个图,V是图G中的顶点的集合,E是图G中边的集合。
最小生成树
最短路径
拓扑排序,对一个有向图构造拓扑序列。
关键路径。路径上各个活动所持续的时间之和为路径长度,从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动叫关键活动。只有缩短关键路径上的关键活动的时间,才能减少整个工期。
8.查找
根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
查找表:需要被查的数据所在的集合,我们统称为查找表。由同一类型的数据元素构成的集合。
关键字、关键码
若关键字可以唯一地标识一个记录,则为主关键字。主关键字所在的数据项称为主关键码。
可以识别多个数据元素的关键字,为次关键字。
索引,为了加快查找速度而设计的一种数据结构。索引就是把一个关键字与它对应的记录相关联的过程。
9.排序
简单选择排序、直接插入排序、归并排序
冒泡排序、堆排序
希尔排序
快速排序