1.1 算法
定义
- 是指对解题方案的准确而完整的描述。
简单的说,就是解决问题的步骤。
基本特征
- 可行性
- 确定性
- 有穷性
- 拥有足够的情报
基本要素
- 对数据对象的运算和操作
- 算法的控制结构,即运算或操作间的秩序
算法复杂度
体现计算所需的计算机资源的多少。
计算资源:时间、空间(存储器)
- 时间复杂度:执行算法所需要的计算工作量
计算工作量,即基本运算次数(问题规模) - 空间复杂度:执行这个算法所需要的内容空间
输入数据、程序本身及算法执行过程所需的存储空间
1.2数据结构的基本概念
数据结构定义
- 数据集合中个数据元素之间固有的逻辑关系,即数据的逻辑结构
- 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构
- 对各种数据结构进行的运算
数据 | 是需要处理的数据元素的集合;一般来讲,这些数据元素,具有某个共同的特征 |
---|---|
结构 | 就是关系,是集合中的各个数据元素之间存在的某种关系(或联系)。线性结构、树形结构、网状结构、集合。 |
数据的前后件关系是数据元素之间的最基本关系。
数据的逻辑结构 | 反映数据元素之间逻辑关系(即前后件关系)的数据结构 |
---|---|
数据的存储空间 | 又称数据的物理结构。是数据的逻辑结构在计算机存储空间中的存放方式。最主要的两种:顺序存储结构、链式存储结构 |
线性结构与非线性结构
1.3 线性表及其顺序存储结构
线性表是n(n≥0)个数据元素构成的有限序列
1.4 栈和队列
栈:先进后出
队列:先进先出
- 栈和一般线性表的实现方法类似,通常也可以采用顺序方法和链接方法链实现
- 队列的排头指针front总是指向队头元素前一个位置,而队尾指针rear总是指向队尾元素
- 循环队列是队列的一种顺序存储结构;满队和空队时,front = rear(S=0 为空; S=1 为非空)
1.5 线性链表
线性链表式存储结构的基本单位称为存储节点,包含数据域和指针域
单链表:
双向链表:左指针(Llink,存放前件地址)、右指针(Rlink,存放后件地址)
- 各数据节点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致
- 数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可
可利用栈:空闲的节点组织成一个带链的栈
1.6 树与二叉树
树(Tree)是一种简单的非线性结构;通常采用链式存储。
术语 | 描述 |
---|---|
父节点(根) | |
子节点和叶子节点 | |
度 | 一个节点所拥有的的后件个数称为该节点的度,所有节点中最大的度称为数的树的度 |
深度 | 定义一棵树的根节点所在层次为1,其他节点所在的层次等于他的父节点所在层次加1。树的最大层次称为数的深度。 |
子数 | 以某节点的一个子节点为根构成的数,称为该节点的一棵子树。 |
二叉树 | 一个有限的节点集合,该集合或者为空,或者由一个根节点及两棵互不相交的左右二叉子树所组成。有n个节点时,深度至少为[int(log(2,n))+1] |
满二叉树 | 除最后一层外,每层的所有节点都有两个子节点的二叉树。在第i层上有2^(i-1) 个节点;深度为K的,整棵树有2^K-1个节点 |
完全二叉树 | 除最后一层外,每层的所有节点数均达到最大值,在最后一层上只缺少右边的若干节点。具有n个节点时,深度为[int(log(2,n))+1] |
ax | 非完全二叉树 |
二叉树遍历
一般先遍历左子树,再遍历右子树
- 前序遍历:访问根节点→前序遍历左子树→前序遍历右子树
- 中序遍历:前序遍历左子树→访问根节点→前序遍历右子树
- 后序遍历:前序遍历左子树→前序遍历右子树→访问根节点
1.7 查找技术
- 顺序查找
- 二分法查找,也称拆半查找,一种高效的查找方法;(满足:1.顺序存储结构;2.线性表是有序表);时间复杂度=log(2,n),n为序列长度;
1.8 排序技术
-
交换排序法
-
冒泡排序法Bubble Sort,最简单的一种;两两相邻数据元素进行比较和交换,不断消去逆序,直到所有元素都有序为止
-
快速排序法Quick Sort,一次扫描,智能确保最大或最小元素移到了正确位置
-
插入类排序法
-
简单插入排序法,每次将一个排序元素,按照其元素值的大小插入到前面已经排好序的子表中的适当位置,直到所有元素插入完成为止;效率与冒泡排序法相同;最坏情况下时间复杂度=n^2,n为序列长度
-
希尔排序法Shell Sort,又称“缩小增量排序”,也是一种插入类排序方法,单在时间效率上较简单掺入排序有较大的改进;最坏情况下时间复杂度=n^1.5,n为序列长度
-
选择类排序法
-
简单选择排序法Simple Selection Sort,从n个待排序数列选择最小元素,将该元素与第一个元素交换,再进行n-1个待排序数列
-
堆排序法,将n个元素按顺序组成一棵完全二叉树,大根堆、小根堆;将根节点与左右子树比较调整