1、算法
算法:指解题方案的准确而完整的描述。
算法的特征:
1.可行性:算法中的每一个步骤必须能实现,算法执行的结果要能够达到预期的目的。
2.确定性
3.有穷性
4.拥有足够的情报
算法设计的基本方法:
1. 列举法
2. 归纳法
3. 递推
4. 递归:直接递归,间接递归
5. 减半递推
6. 回溯法
算法的复杂度:时间复杂度和空间复杂度
时间复杂度:执行算法所需要的计算工作量。分析方法:平均性态分析,最坏情况复杂性
分析
空间复杂度:执行算法所需要的内存空间
数据结构:是指相互有关联的数据元素的集合
主要研究:数据的逻辑结构,数据的存储结构,对各种数据结构进行的运算
主要目的:提高数据处理的效率
数据的逻辑结构:反映数据元素之间逻辑关系的数据结构
数据的存储结构:数据的逻辑结构在计算机存储空间中的存放形式
数据结构分为线性结构和非线性结构。
线性结构:1.有且只有一个根结点2.每个结点最多有一个前件,最多有一个后件。
矩阵也是一种线性表。线性表是一种线性结构。
由若干个数据项组成的数据元素成为记录,由多个记录构成的线性表称为文件。每一个学
生的情况是一个记录,学生情况的登记表是一个文件。数据项是最小的数据元素。
线性表的顺序存储:
1. 线性表中所有元素所占的存储空间是连续的
2. 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的
栈是一种特殊的线性表。一端是封闭的,不允许进行插入和删除元素。允许插入和删除的
一端为栈顶。
栈是按照 “先进后出”的原则。
Top 指针指向栈顶,bottom 指针指向栈底,指针top 反映了栈中元素的变化情况。
Top=0 表示栈空,top=m 表示栈满。
入栈,退栈和读栈顶元素。
队列:指允许在一端进行插入、而在另一端进行删除的线性表。
“先进先出”的线性表。
队尾指针rear 指向队尾元素,排头指针front 指向排头元素的前一个位置。
插入元素只涉及指针rear 的变化,删除元素只涉及指针front 的变化。
循环队列的初始状态唯恐,即rear=front=m
每进行一次入队运算,队尾指针进一,当rear=m+1 时,置rear=1.
每进行一次退队运算,排头指针进一,当front=m+1 时,置front=1 ;
当front=rear 时,不能确定是队列满还是队列空。
线性表顺序存储结构的缺点:
1. 插入与删除运算的效率很低
2. 存储空间不便于扩充
3. 不便于对存储空间的动态分配。
链式存储结构:一部分用于存放数据元素值,称为数据域,另一部分用于存放指针,称为
指针域。
链式存储结构中,存储数据的存储空间可以不连续,数据结点的存储数据和数据元素之间
的逻辑关系可以不一致。
链式存储方式既可用于表示线性结构,也可用于表示非线性结构。
线性表的链式存储结构称为线性链表。
树是一种简单的非线性结构。
一个结点所拥有的后件个数称为该结点的度。
所有结点中的最大的度称为树的度。
树的结点数为树中所有结点的度之和再加1.
树的最大层次称为树的深度。
树在计算机中通常用多重链表表示。
二叉树:
1. 非空二叉树只有一个根结点
2. 每一个结点最多有两棵子树,分别称为该结点的左子树和右子树。
二叉树的基本性质:
1. 在二叉树的第k 层上,最多有2 的k-1 次方个结点。
2. 深度为m 的二叉树,最多有2 的m 次方减1 个结点。
3. 在任意一棵二叉树中,度为0 的结点总是比度为2 的结点多一个。
4. 具有n 个结点的二叉树,其深度至少为[log2 (n)]+1 。
满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。
完全二叉树:除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边
的若干结点。
具有n 个结点的完全二叉树的深度为[log2(n)]+1.
二叉树通常采用链式存储结构。
二叉树的链式存储结构称为二叉链表。
二叉树的遍历:指不重复地访问二叉树中的所有结点。
前序遍历:
1. 访问根结点
2. 前序遍历左子树
3. 前序遍历右子树
中序遍历:
1. 中序遍历左子树
2. 访问根结点
3. 中序遍历右子树
后序遍历:
1. 后序遍历左子树
2. 后序遍历右子树
3. 访问根结点
知道某二叉树的后序序列和中序序列,可以唯一的恢复该二叉树,只知道前序序列和中序
序列可以唯一的恢复二叉树,只知道前序序列和后序序列,不能唯一的恢复二叉树。
顺序查找:最坏情况下为n 次
二分法查找只能用于顺序存储的有序表