数据结构
CodingMiao
永远是学生
展开
-
最短路径:迪杰斯特拉算法
算法步骤: 1.初始化: (1)将源点v0加到S中,即S[v0]=true; (2)将v0到各个终点的最短路径长度初始化为权值,即D[i]=G.arcs[v0][vi],(vi属于V-S); (3)如果v0和顶点vi之间有弧,则将vi的前驱置为v0,即Path[i]=v0,否则Path[i]=-1. 2.循环n-1次,执行以下操作: (1)选择下一条最短路径的原创 2017-06-30 21:08:12 · 570 阅读 · 1 评论 -
最小生成树:普里姆算法.c++
普里姆算法简易步骤: 辅助数组closedge记录从U到V-U具有最小权值的边,其中lowcost储存最小边上的权值,adjvex储存最小边在U中的那个顶点数组的定义:struct{ VerTexType adjvex; ArcType lowcost; }closedge[MVNum];普里姆算法步骤: 1.将初始顶点u加入U中,对其余的每一个顶点vj,将closedge[j]均初原创 2017-06-28 11:45:49 · 2827 阅读 · 1 评论 -
邻接矩阵&邻接表.c++
邻接矩阵存储表示#define MaxInt 32767#define MVNum 100typedef char VerTexType;typedef int ArcType;typedef struct{ VerTexType vexs[MVNum]; ArcType arcs[MVNum][MVNum]; int vexnum,arcnum; }AMGr原创 2017-06-27 12:49:30 · 526 阅读 · 0 评论 -
哈夫曼树(最优二叉树)&哈夫曼编码.c++
路径长度:路径上的分支数目 树的路径长度:从树根到每一结点的路径长度之和 结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积 树的带权路径长度:树中所有叶子结点的带权路径长度之和哈夫曼树的构造过程 (1)构造n棵只有根结点的二叉树,这n棵二叉树构成一个森林F (2)在F中选两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点原创 2017-06-26 13:41:39 · 1109 阅读 · 0 评论 -
就地逆置(源码用c++)
源码Status Reverse(LinkList &L){ LinkList p=L->next,q; //1 L->next=NULL; //2 while(p!=NULL){ q=p->next; //3 p->next=L->next; //4 L->ne原创 2017-06-23 13:14:51 · 517 阅读 · 0 评论 -
根据遍历序列确定二叉树
由二叉树的先序序列和中序序列1.在先序序列中,第一个结点一定是二叉树的根结点 2.在中序序列中,根结点必然将中序序列分割成两个子序列;前一个子序列是根结点的左子树的中序序列,后一个是右子树的 3.根据这两个子序列,在先序序列中找到对应的左右子序列 4.在先序序列中,左子序列的第一个结点是左子树的根结点,右子序列同理 5.如此递归下去总结:先序配合中序时,中序负责找左右子序列,先序负责找子树的原创 2017-06-23 11:21:12 · 10197 阅读 · 3 评论 -
数据结构基础学习笔记 part 2
链的储存结构定义单链表 结点数据域 结点的指针域typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList链栈 数据域 结点的指针域typedef struct StackNode{ ElemType data; struct StackNode *next;}StackNode,原创 2017-06-21 21:00:35 · 177 阅读 · 0 评论 -
数据结构基础学习笔记 part 1
顺序表初始化Status InitList(SqList &L){ L.elem=new ElemType[MAXSIZE]; if(!L.elem) exit(OVERFLOW); L.length=0; return 0;}取值Status GetElem(SqList L,int i,ElemType &e){ if(i<1 || i>L.length) ret原创 2017-06-21 20:38:15 · 633 阅读 · 0 评论 -
最短路径:弗洛伊德算法
由于弗洛伊德和迪杰斯特拉很相似,所以不做总结,直接上图算法步骤 算法描述转载 2017-06-30 21:33:48 · 291 阅读 · 0 评论 -
最小生成树:克鲁斯卡尔算法.c++
结构体数组Edgestruct{ VerTexType Head; VerYexType Tail; ArcType lowcost;//边上的权值 }Edge[arcnum];Vexset[i],标识各个顶点所属的连通分量,初始时Vexset[i]=i克鲁斯卡尔算法的步骤:1.将数组Edge中的元素按权值从小到大排序 2.依次查看数组Edge中的边,循环执行以下操作: (1原创 2017-06-28 12:10:16 · 1278 阅读 · 1 评论