数据是信息的载体,能被计算机识别,存储和加工处理
数据元素是数据的基本单位,可由若干数据项组成,数据项是具有独立含义的最小标识单位。
数据的存储结构:顺序存储,链接存储,索引存储,散列索引
评价算法的质量:正确性,易读性,健壮性,高效率。
算法的特征:有穷性,确定性,可行性,输入和输出。
决定算法运行时间的因素:问题规模,编译时间,指令执行速度,重复执行指令的速度
数据结构
node *p=(node*)malloc(sizeof(node)); 分配地址
free(p); 释放资源
顺序表
链表 prior data next
typedef struct node
{
datatype data,
struct node *next
}*pNode;
栈 注意溢出 是否为空栈 栈顶进出
typedef struct stack
{
pNode Top,
pNode Bottom
}*Pstack;
队列 是一种受限的线性表,允许删除的一端称为对首,允许插入的一端称队尾
边界条件 為克服假上溢,i=(i+1)%queuesize
解決方式,設置布尔变量区分队列满或空,少用一个元素,rear+1=front,使用计数器记录元素总数
typedef struct Queue
{
pNode rear,
pNode front,
int len,
int size
}*pQueue;
串 存储结构:顺序存储与链接存储
多维数组
特殊矩阵
对称矩阵 转换为数据存储 n(n+1)/2 i(i+1)/2+j
三角矩阵 n(n+1)/2+1 转换为数组时,分上下三角矩阵
上三角矩阵
下三角矩阵
稀疏矩阵 压缩方式 三元表示法 (i,j,data) 行指针链表 十字链表
树
树上任一结点拥有的子树数称为该结点的度
树中的每个结点的子树不能变更其位置,称为有序树,反之称为无序树
二叉树减枝
二叉树性质:
在二叉树的第i层最多有2(i-1) 个结点 2*0 2*1
二叉树中如果深度为K,那么最多具有2(k)-1 个结点
n0=n2+1 n0表示度数为0的结点 n2表示度数为2的结点
完全二叉树中,具有n个节点的完全二叉树的深度为(log2n)+1 ,其中(log2n)+1是向下取整
如果有一颗有n个结点的完全二叉树的节点是按层次序编号的,对任一层的结点i(1<=i<=n)有
1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整
2.如果2i>n那么节点i没有左孩子,否则其左孩子为2i
3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1
二叉树遍历 前序遍历 中序遍历 后续遍历 时间复杂度为O(0)
typedef struct Treenode
{
struct Treenode *lchild,
struct Treenode *rchild,
datatype data
}*pTree;
森林通常定义为树的集合
树与二叉树的转换 1.所有的兄弟连线 2.保留与长子的连线,去除其他连线
森林与二叉树的转换 1.将所有树转换成二叉树 2.将所有根节点连接
森林的前序遍历等同前序遍历二叉树
森林的后续遍历等同中序遍历二叉树
路径:从树的一个结点到树的另一个结点之前的分支
长度:路径上的分支数目
结点的带权路径长度
哈夫曼树
字符集编码 前缀码
图 G=(V,E) 有向图<V1,V2> 无向图(V1,V2)
度 入度 出度
n个顶点,有n(n-1)/2条边的无向图为无向完全图,有n(n-1)条边的有向图为有向完全图
联通图:任意两个顶点都可及
一个联通图的生成树,极小联通子图
强联通图:有向图中任意两点都有路径,极大联通图称为强联通分量
网:带权的图
图的存储结构:
邻接矩阵表示法
邻接表表示法
图的遍历:
深度优先
广度优先
最小生成树:权值最小的生成树
普里姆:从顶点v0开始,选取权值最小的边(v0,v1)加入最终序列中,再从剩余集合中选取连接到最终集合权值最小的边,依次将所有顶点加入最终集合中
克鲁斯卡尔:选择最小权的边,加入最终集合T,再依次选择不联通最终集合最小权的边加入最终集合T,直到将所有顶点加入集合T中。
AOV网:顶点表示活动,有向边表示活动的先后关系
拓扑序列:AOV网中的所有顶点排成一个序列,使得每个活动的前驱活动都排在该活动的前面
拓扑存储:以向量存储所有顶点,包含入度数,数据,弧尾指针
拓扑排序:从AOV网中选择一个入度为0 的顶点输出,让后删除此顶点,并删除以此顶点为尾的弧;重复此操作,直到输出全部顶点或不存在入度为0的顶点为止。