一、算法
1. 概念
1.1 算法:是指解题方案的准确而完整的描述。(算法不等于程序)
- 可行性:在设计一个算法时,必须考虑他的可行性
- 确定性:算法中的每个步骤必须是明确定义的,不允许模棱两可
- 有穷性:算法必须在有限的时间内做完,必须在执行有限个步骤之后停止
- 足够的情报:是指算法要有一定的输入数据和必须要有的输出结果
2. 算法的基本要素
2.1 对数据对象的运算和 操作:
- 算数运算、逻辑运算、关系运算、数据传输
2.2 算法的控制结构
- 算法中各操作之间的执行顺序
- 描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等
- 一个算法一般可以用==顺序、选择、循环、==三种基本结构组合而成
3. 时间和空间复杂度
3.1 算法的时间复杂度
- 是指执行算法所需要的计算工作量,可以用算法所执行的基本运算次数度量
3.2 算法的空间复杂度
- 是指执行算法所需要的内存空间。包括算法程序、输入的初始数据以及算法执行过程中需要的额外空间。
3.3 算法的时间复杂度和 空间复杂度 相互独立
二、数据结构
1. 数据结构
1.1 数据:
- 需要处理的数据元素的集合,一般来说,这些数据元素,具有某个共同的特征
数据元素是数据的基本单位,即数据集合中的个体。
有时一个数据元素可由若干个==数据项(Data Item)==组成。数据项是数据的最小单位。
1.2 结构:
- 所谓“结构”,是集合中各个数据元素之间存在的某种关系(或联系)
1.3 数据结构:
- 是指相互有关联的数据元素的集合
2. 数据结构的分类
2.1 逻辑结构:
指反映数据元素之间的逻辑关系(即前后件关系)的数据结构
- 线性结构:线性表,栈,队列
线性结构(线性表):
- 有且只有一个根节点,它无前件
- 每一个节点最多有一个前件,也最多有一个后件
例子:
春–>夏–>秋–>冬
就是可以用一条线串起来的
- 非线性结构:树,图
不满足以上两个条件的数据结构就称为非线性结构,
非线性结构主要是指树形结构和网状结构
2.2 存储结构(物理结构)
又称为数据的物理结构,是数据的逻辑结构在计算机存储空间中的存放方式
- 顺序存储:
主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里
- 链式存储
每一个节点至少包含一个指针域,用指针的指向来体现数据元素之间在逻辑上的联系
- 一种逻辑结构可以有多种存储结构
- 不同的存储结构其数据处理的效率不同
3.3 运算
- 插入,删除,查找,排序
3. 线性表
3.1 线性表的概念
线性表是n (n >= 0) 个数据元素构成的有限序列,表中除第一个元素外的每一个元素, 有且只有一个前件, 除最后一个元素外, 有且只有一个后件。
- 例子:
4. 线性表的顺序存储结构
4.1 概念
- 通常,线性表可以采用顺序存储和 链式存储,但一般使用 顺序存储结构。
- 线性表的顺序存储又叫 顺序表
4.2 特点:
- 线性表中所有元素所占的存储空间是连续的
- 线性表中数据元素在存储空间中是按逻辑顺序依次存放的
- 可以随机访问数据元素
- 做插入、删除时需要移动大量元素, 因此线性表不便于插入和删除元素
5. 栈
5.1 栈的概念
栈是限定在一端进行插入和 删除的线性表
5.2 栈的特点:
- 栈是只能在栈顶进行插入和 删除
- 栈的修改原则 是 “先进后出” 或 “后进后出”
- 栈是限定在一端进行插入和 删除的线性表
- 栈底指针不变,栈中元素随栈顶指针的变化而动态变化
- 栈具有记忆功能
- 栈支持子程序调用
6. 队列
6.1 队列的概念
- 队列: 是指允许在一端进行插入,而在另一端进行删除的线性表。原则是:先进先出或(后进后出)
6.2 队列的特点:
- 队列只允许在队尾进行插入,而在对头 进行删除
- 队列的修改原则是“先进先出”或 “后进后出”
- 队列中元素随对头指针和队尾指针的变化而动态变化
6.3 循环队列的逻辑和 指针所在域计算的示意图:
7. 线性表和线性链表的概念
- 线性表可以采用顺序存储和 链式存储,一般使用 顺序存储结构
- 线性表的顺序存储叫做顺序表,线性表的链式存储结构叫做线性链表
顺序表示意图:
8. 线性链表
线性表链式存储结构表示意图:
8.1 线性链表的特点
- 各数据结点的存储空间可以不连续
- 各数据元素的存储顺序 与 逻辑顺序可以不一致
- 线性表的 链式存储所占存储空间大于顺序存储结构
- 查找结点时链式存储要比顺序存储慢
- 链式存储插入、删除元素比顺序存储灵活(指针域指向或 不指向)
8.2 线性链表的特殊结构–双向链表
示意图:
8.3 线性链表的特殊结构–循环链表
9. 树的概念
树是n(n>0)个元素的有限集合。他有且仅有一个称为根的元素;其余元素是互不相交的子树。
9.1. 二叉树
- 二叉树:是一个有限的结点集合,该集合或者为空,或者由一个根节点及其两棵互不相交的左右二叉子树所组成
- 二叉树的五种基本形态:
9.2 特殊的二叉树
- 满二叉树:除最后一层外,每一层上的节点数均达到最大值
- 完全二叉树:除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干接点
9.3 二叉树的性质(计算二叉树的结点、深度)
- 非空二叉树只有一个根节点,每个结点最多有两棵子树,分别称为左子树和右子树
- 在二叉树的第K层上,最多有==2k-1==个结点
- 在深度为m的二叉树 **最多**有2m-1个结点
- 度为0 的结点(叶子结点)总比度为2 的结点多一个
- 有n 个结点的二叉树,深度 至少为 [log2 n] +1
9.4. 二叉树的遍历(前序、中序、后序)
10. 查找技术
10.1 顺序查找
- 概念:对于长度为n的线性表,平均要进行n/2次比较,在最坏情况下进行n次比较
- 顺序查找适用于无序表或链式线性表(不管无序还是有序)
10.2 二分查找
- 概念:适用于顺序存储的有序表,对长度为n 的线性表,在最坏的情况下进行 log2n次比较
- 注意:即使是有序线性表,如果采用链式存储结构,也只能用顺序查找
11. 排序
11.1 各种排序的时长和 效率
11.2 快速排序
- 基本思想:
- 在要排序的序列中找一个数作为基准数(通常为第一个数)
- 通过交换将这个虚列中所有 比基准数大的数放在右边,比基准数小的数放在左边
- 以基准数为分割线分为两个子表, 对两个子表 重复上述步骤
图片和文字素材来自 :B站源恩等考二级公共基础