![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Daphne_Liu
这个作者很懒,什么都没留下…
展开
-
归并排序和基数排序
归并排序//归并排序 void Msort ( RcdType SR[], RcdType TR1[], int s, int t ) { if (s==t) TR1[s] = SR[s]; else { m = (s+t)/2; Msort (SR,TR2,s,m); Msort (SR,TR2,m+1, t); Merge (TR2,TR1,s,m,t); }} void Merge (RcdType SR[], RcdType TR[], int i, int m,原创 2020-08-26 12:52:04 · 184 阅读 · 0 评论 -
交换排序
冒泡排序第n个数据和第n+1个数据比较,大的往后交换,一趟下来,最大的换到最后面。重复上述过程,直至没有数据需要交换,则排序结束。样例解释快速排序分区//不断与枢轴交换 int Partition(SqList &L,int low,int high){ pivotkey=L.r[low];//用子表的第一个记录做枢轴记录 while(low<high){ while(low<high&&L.r[high]>=pivotkey) --h原创 2020-08-25 15:03:50 · 168 阅读 · 0 评论 -
插入排序
直接插入排序将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。过程示意代码实现void InsertSort(SqLiist &L){ for(i=2;i<L.length;++i){ if(L.r[i]<L.r[i-1]){ L.r[0]=L.r[i];//复制为哨兵 L.r[i]=L.r[i-1]; for(j=i-2;L.r[0]<L.r[j];--j){ L.r[j+1]=L.r[j]; }//后移过程原创 2020-08-25 10:37:36 · 102 阅读 · 0 评论 -
平衡二叉树
原创 2020-08-23 22:08:18 · 88 阅读 · 0 评论 -
数据结构---静态查找表
有序表的查找-折半查找确定待查数据的范围,然后逐步缩小范围直到找到或者找不到为止。代码实现—非递归//折半查找(非递归)int Search_Bin(Table,KeyType key){ low=1; high=ST.length; while(low<high){ mid=(low+high)/2; if(key==ST.elem[mid].key) return mid; else if(key<ST.elem[mid].key) high=mid-1原创 2020-08-22 17:54:50 · 413 阅读 · 0 评论 -
最短路径问题
最短路径问题在有向图中A点到B点的多条路径中,寻找一条各边权值之和最小的路径,即最短路径。单源点最短路径—迪杰斯特拉Dijkstra用带权值的邻接矩阵来表示带权有向图,arcs[i][j]表示弧<vi,vj>上的权值。若<vi,vj>不存在,则置权值为∞选择最小的权值,将该弧弧头并入集合S。修改从v出发到集合V-S上任意一顶点vk可达的最短路径长度。重复上述操作n-1次。即求得路径长度递增的序列。样例解释代码实现...原创 2020-08-19 19:13:07 · 283 阅读 · 0 评论 -
AOE-网求关键路径
AOE-网求关键路径AOE-网,即边表示活动的网。活动的最早发生时间和最迟发生时间相同的活动即为关键活动。代码实现算法详解见注释//求各顶点事件的最早发生时间veStatus TopologicalOrder(ALGraph G,Stack &T) { //有向图G采用邻接表存储结构 FindINDegree(G, indegree); //对各顶点求入度 InitStack(T); count = 0;//入栈计数 ve[0..G.vexnum - 1] = 0;//初始化原创 2020-08-17 18:43:20 · 284 阅读 · 0 评论 -
拓扑排序
拓扑排序什么是拓扑排序?对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简言之,就是事物按照某种特定的优先关系进行排序。怎么实现拓扑排序?在有向图中选一个没有前驱的顶点且输出之。从图中删除该顶点和所有以他为尾的弧。重复上述两步,原创 2020-08-17 17:18:43 · 205 阅读 · 0 评论 -
普利姆算法
普利姆算法求最小生成树在所有u属于U,v属于V-U的边(u,v)属于E中找一条代价最小的边(u0,v0)并入集合TE,同时v0并入U,直至U=V为止。此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。以下图为例,构造最小生成树,如图:构造过程中辅助数组中各分量值,如图:代码如下:(详解见注释)void MiniSpanTree_PRIM(MGraph G, VertexType u) { struct { VertexType adjvex; VRType lowc原创 2020-08-15 13:56:25 · 466 阅读 · 0 评论 -
哈夫曼编码
哈夫曼编码建哈夫曼树先得到最小两个权值的结点,用这两个结点创建一个新的结点,新结点的权值为这两个节点的权值之和,之后就将这个结点添加到已有的结点中,再将之前的两个结点从结点中删除,之后就是重复上面的操作。求哈夫曼编码从根逆向求,如果是parent的左孩子就是0,右孩子就是1。编码倒叙存储,正序输出即为哈夫曼编码。typedef struct { int weight;//权值 int parent, lchild, rchild;}HTNode, * HuffmanTree;typedef原创 2020-08-12 15:21:17 · 419 阅读 · 0 评论 -
中序线索二叉树的遍历、寻找结点前驱和后继
中序线索二叉树的遍历笔者在学习过程中,借鉴博客:https://blog.csdn.net/One_castle/article/details/102968998遍历观察图中箭头指向。因为右孩子有可能指向后继,而且即使右孩子不是后继,我们也可以先去到右孩子的最左边,这样后继就是这个结点。所以遍历的核心思想是:先找到最左边的节点,然后判断其右子树是否为线索,如果是线索,那么就遍历后继结点,如果右子树是右孩子,那么就进入到右孩子的最左边的节点,进行同样的判断,知道遍历完了整棵树为止。void tr原创 2020-08-05 15:45:03 · 7825 阅读 · 1 评论 -
二叉树的线索化
二叉树的线索化笔者学习过程中,借鉴博客:https://blog.csdn.net/One_castle/article/details/102968998]结点类型struct BiThrNode{ int date; struct BiThrNode *lchild,*rchild; int LTag,RTag;};LTag0 lchild指示左孩子1 lchild指示结点前驱RTag0 rchild指示右孩子1 rchild指示结点后继线索化BiT原创 2020-07-29 16:54:01 · 128 阅读 · 0 评论 -
数据结构:二叉树基本操作
二叉树基本操作创建 复制 求树深度本贴借鉴原文章链接 预查看点击此处#include<stdio.h>#include<stdlib.h>struct tree{ int date; struct tree* left; struct tree* right;};//结点结构typedef tree node;typedef node* ptree;ptree creatree(int* date,int num) { ptree tempT;//.原创 2020-07-18 17:03:09 · 250 阅读 · 0 评论 -
数据结构:根据中序序列和先序序列建二叉树算法
引例 我们可以简单分析一下如何通过先序序列和中序序列建立二叉树已知中序序列和先序序列 我们如何设计算法 树的算法基本离不开递归 整棵树可分为左子树 根 右子树 左右子树同样可以分为如上结构 我们只需要改变调用函数时传入的参数 参数分析如图Void Crtbt(T,pre[],ino[],ps,is,n){ /*根据先序和中序序列建立二叉树递归算法 传入参数为:根节点 先序序列 中序序列 先序序列第一个结点 中序序列第一个结点 二叉树节点个数 */ if(n==0) T==NULL;/.原创 2020-05-19 13:26:25 · 1510 阅读 · 0 评论