![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
严蔚敏的视频笔记
「已注销」
望各位高手不吝赐教。先拜谢了!
展开
-
00
《数据结构》(C语言版)严蔚敏清华大学出版社第1章 结论 1.1 什么是数据结构1.2 基本概念和术语1.3 抽象数据类型的表示与实现1.4 算法和算法分析1.4.1 算法1.4.2 算法设计的要求1.4.3 算法效率的度量1.4.4 算法的存储空间需求 第2章 线性表 2.1 线性表的类型定义2.2 线性表的顺序表示和实现2.3 线原创 2010-04-29 20:44:00 · 153 阅读 · 0 评论 -
15
严蔚敏视频 笔记15三、十字链表增加两个指针一个指示同一行下一个非零元一个指示同一列下一个非零元非零元个数有增减时很方便typedef struct OLNode { int i,j; // 该非零元的行和列下标 ElemType e; struct OLNode *right, *down; // 该非零元所在的行表和列表的后继链域} OLNode, *OLink;原创 2010-04-29 21:14:00 · 151 阅读 · 0 评论 -
18
严蔚敏视频 笔记18(下)查找:Root(T); Value(T,e); Parent(T,e);LeftChild(T,e); RightChild(T,e);LetfSibling(T,e); RightSibling(T,e);BiTreeEmpty(T); BiTreeDepth(T);PreOrderTraverse(T,Visit());InOrderTraverse(T,Visi原创 2010-04-29 21:14:00 · 160 阅读 · 0 评论 -
19
严蔚敏视频 笔记19性质5:若对一棵有n个结点的完全二叉树从上到下从左到右进行1至n的编号,则对任一编号为 i 的结点有:(1) 如果i=1,则该结点是二叉树的根,无双亲;否则编号为|_ i/2 _|的结点为其双亲结点。(2) 如果2i>n,则该结点无左孩子结点;否则编号为2i的结点为其左孩子结点。(3) 如果2i+1>n,则该结点无右孩子结点;否则编号为2i+1的结点为其右孩子结点。6.原创 2010-04-29 21:16:00 · 163 阅读 · 0 评论 -
20
严蔚敏视频 笔记20遍历算法的应用举例1.统计二叉树中叶子结点的个数(先序遍历)void CountLeaf(BiTree T,int &count) { if(T) { if((!T->lchild)&&(!T->rchild)) count++; CountLeaf(T->lchild,count); CountLeaf(T->rchil原创 2010-04-29 21:18:00 · 178 阅读 · 0 评论 -
22
严蔚敏视频 笔记226.4 树和森林的表示方法树的三种存储结构一、双亲表示法#define MAX_TREE_SIZE 100// 结点结构typedef struct PTNode { Elem data; int parent; // 双亲位置域} PTNode;// 树结构typedef struct { PTNode nodes[MAX_TREE_SIZE原创 2010-04-29 21:19:00 · 139 阅读 · 0 评论 -
23
严蔚敏视频 笔记23二、输出所有从根结点到叶子结点的路径void AllPath(Bitree T,Stack &S) {// 输出二叉树上从根到所有叶子结点的路径 if(T) { Push(S,T->data); if(!T->Left&&!T->Right) PrintStack(S); else { AllPath(T原创 2010-04-29 21:20:00 · 186 阅读 · 1 评论 -
24
严蔚敏视屏 笔记24如何构造最优树以二叉树为例:(1)根据给定的n个权值构造n棵二叉树的集合F,其中每棵二叉树中均只含一个带权值为wi的根结点,其左右子树为空树(2)在F中选取其根结点的权值为最小的两棵二叉树,分别作为左右子树构造一棵新的二叉树并置这棵新的二叉树根结点的权值为其左右子树根结点的权值之和(3)从F中删去这两棵二叉树,同时加入刚生成的新树(4)重复(2)(3)两步直至F中只含有一棵原创 2010-04-29 21:20:00 · 169 阅读 · 0 评论 -
25
严蔚敏视频 笔记25基本操作P结构的建立和销毁CreateGraph(&G,V,VR);DestroyGraph(&G);对顶点的访问操作LocateVex(G,u); // 定位操作GetVex(G,v); // 返回v值PutVex(&G,v,value); // 对v赋值value对邻接点的操作FirstAdjVex(G,v); // 返回v的第一个邻接点NextAdjVex(G,v,w原创 2010-04-29 21:21:00 · 198 阅读 · 0 评论 -
26
严蔚敏视频 笔记26深度优先搜索遍历图从图中某个顶点v0出发,访问此顶点,然后依次从v0的各个未被访问的邻接点出发深度优先遍历图,直至图中所有和v0有路径相通的顶点都被访问到,此时若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止void DFSTraverse(Graph G,Status (*Visit)(int v)) {原创 2010-04-29 21:23:00 · 133 阅读 · 0 评论 -
27
严蔚敏视频 笔记27遍历应用举例1.求一条从顶点i到顶点s的简单路径void DFSearch(int v,int s,char *PATH) { visited[v]=TRUE; // 访问第v个结点 Append(PATH,getVertex(v)); for(w=FirstAdjVex(v);w!=0&&!found;w=NextAdjVex(v)) {原创 2010-04-29 21:23:00 · 346 阅读 · 0 评论 -
28
严蔚敏视频 笔记287.5 重(双)连通图和关节点若从一个连通图中删去任何一个顶点及其相关联的边仍为一个连通图,则该连通图被称为重(双)连通图若连通图中某个顶点和其相关联的边被删去之后,该连通图被分割成两个或两个以上的连通分量,则称此顶点为关节点关节点特征:深度优先搜索遍历得到深度优先生成树若生成树上的根结点,有两个或两个以上的分支,则此顶点必为关节点对生成树上的任意一个“顶点”,原创 2010-04-29 21:24:00 · 184 阅读 · 0 评论 -
29
严蔚敏视频 笔记29每一对顶点之间的最短路径从vi到vj的所有存在路径中选出一条长度最短的路径算法:若存在,则存在路径{vi,v1,vj}// 路径中所含顶点序号不大于1若{vi,…,v2},{v2,…,vj}存在则存在一条路径{vi,…,v2,…,vj}// 路径中所含顶点序号不大于2…依此类推,则vi至vj的最短路径应是上述这些路径中长度最小者7.7 拓扑排序以有向图表示一原创 2010-04-29 21:25:00 · 203 阅读 · 0 评论 -
14
严蔚敏视频 笔记14Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T) { T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) { for(col=1;col for(t=1;t求M中每一列含非零元个数 cpot[1]=1; for(col=2原创 2010-04-29 21:13:00 · 175 阅读 · 0 评论 -
13
严蔚敏视频 笔记13第五章 数组和广义表5.1 数组的类型定义多维数组ADT Array { 数据对象: D={aj1j2…jn|n>0称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2…jn∈ElemSet} 数据关系: R={R1,R2,…,Rn} Ri={| 0 且k aj1…原创 2010-04-29 21:04:00 · 164 阅读 · 0 评论 -
01
严蔚敏视频 笔记011.1 数据结构讨论的范畴 算法+数据结构=程序设计为计算机处理问题编制的一组指令集 数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作载计算机中的表示和实现 1.2 基本概念 数据:所有能被输入到计算机中,且被计算机处理的符号的集合计算机操作的对象的总称是计算机处理的信息的某种特定的符号表示形式 数据元素:原创 2010-04-29 20:46:00 · 133 阅读 · 0 评论 -
02
严蔚敏视频 笔记02算法必须满足5个特性:1.有穷性 有穷步骤 有限时间2.确定性 只有一条执行路径3.可行性 可以通过已经实现的基本操作运算的有限次实现4.有输入 中断输入或嵌入算法当中5.有输出 是信息加工得到的结果 是算法的功能 设计原则:1.正确性 满足特定需求 对正确的理解: a.不含语法错误 b.对于几组输入数据能够得出满足要求的结原创 2010-04-29 20:49:00 · 144 阅读 · 0 评论 -
03
严蔚敏视频 笔记03线性结构 数据元素的有序集 线性结构的基本特征:集合中必存在唯一一个“第一元素”集合中必存在唯一一个“最后元素”除最后元素外均有唯一的后继除第一元素外均有唯一的前驱 2.1 线性表的类型定义 ADT List {数据对象: D={ai|ai∈ElemSet,i=1,2,...n,n>=0} {称n为线性表的原创 2010-04-29 20:53:00 · 168 阅读 · 0 评论 -
04
严蔚敏视频 笔记04用一组地址连续的存储单元依次存放线性表中的数据元素 顺序映象的C语言描述#define LIST_INIT_SIZE 80 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct { ElemType *elem; //存储空间基址 int length原创 2010-04-29 20:54:00 · 124 阅读 · 0 评论 -
05
严蔚敏视频 笔记05链表的生成操作void CreateList_L(LinkList &L,int n) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; // 先建立一个带头结点的单链表 for(i=n;i>0;--i) { p=(LinkList)malloc(sizeof(LNode原创 2010-04-29 20:56:00 · 135 阅读 · 0 评论 -
06
严蔚敏视频 笔记06其它形式的链表 1.双向链表typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *prior; // 指向前驱的指针域 struct DuLNode *next; // 指向后继的指针域} DuLNode, *DuLinkList; 空表头结点前驱和原创 2010-04-29 20:58:00 · 149 阅读 · 0 评论 -
07
严蔚敏视频 笔记07习题课后思考题1.2 1.3 1.4 2.4.2.5.2.8 2.9 3.2 3.6 3.8 3.12 3.15 4.2 4.4 4.7 4.11 问题的解决 例一 数制转换算法基于原理:N = (N div d) * d + N mod d 十进制转八进制void conversion() { InitStack(S);原创 2010-04-29 20:59:00 · 135 阅读 · 0 评论 -
08
严蔚敏视频 笔记08例五 表达式求值 限于二元运算符的表达式定义:表达式::=(操作数)+(运算符)+(操作数)操作数::=简单变量|表达式简单变量::=标识符|无符号整数 OP S1 S2 前缀表示法S1 OP S2 中缀表示法S1 S2 OP 后缀表示法 结论:1)操作数之间的相对次序不变2)运算符的相对次序不同3)中缀式丢失了括弧信原创 2010-04-29 20:59:00 · 121 阅读 · 0 评论 -
09
严蔚敏视频 笔记09理解递归算法 3.3 栈类型的实现 顺序栈#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct { SElem Type *base; SElem Type *top; int stacksize;} SqStack;原创 2010-04-29 21:00:00 · 139 阅读 · 0 评论 -
10
严蔚敏视频 笔记10第四章 串4.1 串的抽象数据类型的定义ADT String { 数据对象:D={ai|ai∈CharacterSet,i=1,2,…n,n>=0} 数据关系:R1={|ai-1,ai∈D,i=2,…n} 基本操作: StrAssign(&T,chars) 赋值 StrCompare(S,T) 按字典顺序比较大小原创 2010-04-29 21:01:00 · 201 阅读 · 0 评论 -
11
严蔚敏视频 笔记11二、串的堆分配存储表示typedef struct { char *ch; // 若是非空串则按串长分配存储区,否则ch为NULL int length; // 串长度} HString;C语言中提供的类型malloc和free动态管理实现算法:先为新生成的串分配一个存储空间,然后进行串值的复制三、串的块链存储表示#define CHUNKSIZE原创 2010-04-29 21:02:00 · 152 阅读 · 0 评论 -
12
严蔚敏视频 笔记12int Index_KMP(SString S,SString T,int pos)克服了指针回溯的问题求next函数值的过程是一个递推过程已知next[1]=0假设next[j]=k又T[j]=T[k]则next[j+1]=k+1void get_next(SString T,int &next[]) { i=1; next[1]=0; j=0;原创 2010-04-29 21:04:00 · 135 阅读 · 0 评论 -
30
严蔚敏视频 笔记30为避免每次都要搜索入度为零的顶点,在算法中设置一个“栈”,以保存“入度为零”的顶点CountInDegree(G,indegree);// 对各顶点求入度InitStack(S);for(i=0;i if(!indegree[i]) Push(S,i); // 入度为零的顶点入栈count=0; // 对输出顶点计数while(!EmptyStack(S))原创 2010-04-29 21:25:00 · 173 阅读 · 0 评论