数据结构与算法
绪论
数据结构的基本概念
数据: 是信息的载体, 分整数型与非整数型数据
数据项: 构成数据元素的最小不可分割单位, 如学生的成绩
数据元素: 数据的基本单位, 作为一个整体存储, 如每个学生的信息
数据类型: 具有相同性质的计算机数据的集合, 以及在这个集合上的一系列操作, 比如int、str、数组、类等, 分为简单类型(原子类型)和构造类型(结构类型), int、float等为简单类型, 数组、类等为构造类型
数据结构的定义: 按照某种逻辑关系组织起来的一组数据, 按一定的存储方式存储在计算机的存储器中, 并在这些数据上定义了一组运算的集合
数据结构的组成:
- 逻辑关系
- 集合
- 线性关系
- 树结构
- 图结构
- 存储方式
- 顺序存储
- 链式存储
- 对数据的操作
算法的基本概念
算法分析
算法的五个要素:
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
描述算法的方法:
- 自然语言
- 流程图
- 伪代码
- 程序设计语言
评价算法的方法:时间复杂度、空间复杂度、鲁棒性.....
时间复杂度
算法的频度:每条代码执行的次数
算法的时间耗费:各条代码执行的总次数
时间复杂度O( ): 括号中为对时间耗费影响最大的因子,可以为\(n^2、n^k、log_2n、n! .....\)等
NP问题
P问题(多项式时间问题): 能找到一个能在多项式的时间里解决它的算法的问题, 这种算法叫多项式时间算法。另一类为指数时间算法, 其时间复杂度不能用多项式函数界定
NP问题: 不确定能否在多项式时间内找到一个解, 但能在多项式时间内验证一个解(也就是说不一定存在一个多项式解决算法, 但存在多项式检查算法)
NP完全问题(NPC问题): 每一个可能解都可以在多项式时间内验证的NP问题
线性表
概述
逻辑结构
定义
零个或多个相同类型的数据元素构成的有限序列
数学表示
\(L=(a_1, a_2, ...., a_n)\)
逻辑表示
只有一个头结点与一个尾节点, 每一个中间节点有且只有一个直接前驱, 只有一个直接后继
操作
- 插入
- 删除
- 求长度
- 按位置取值
- 按值搜索
- 打印
存储结构
- 顺序结构: 顺序表
- 链式结构: 链表
- 单链表
- 循环链表
- 双链表
顺序表
用一段连续的存储空间依次存储数据元素
实现
C++数组 + 模板类
二叉树的性质
- 一颗非空二叉树的第i层上最多\(2^{i-1}\)个结点
- 深度为h的二叉树最多有\(n=2^{h}-1\)个结点
- 一颗二叉树,若其叶结点数\(n_0\),度为2的结点数\(n_2\),则\(n_0=n_2+1\)
- 具有n个结点的完全二叉树的深度为\([\log_2n]-1\)
- 对n个结点的完全二叉树,如果按从上到下,从左到右的顺序(从1开始)编号,则
- 若i>1,则其双亲结点序号为[\(\frac{i}{2}\)]
- 若2i>n,则结点i无左孩子,否则其左孩子为2i
- 若2i+1>n,则结点i无右孩子,否则其右孩子为2i+1

浙公网安备 33010602011771号