随笔分类 - 数据结构
摘要:超好的博客,总结很全面: https://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html
阅读全文
摘要:/*并查集*/ #include int *a; int *sz; int count; //the number of connected component //union two connected components with weights void union_two_points(int p, int q) { int i = root(p); int j = ro...
阅读全文
摘要:BinTree Insert( BinTree BST, ElementType X ) { if( !BST ){ /* 若原树为空,生成并返回一个结点的二叉搜索树 */ BST = (BinTree)malloc(sizeof(struct TNode)); BST->Data = X; BST->Left = BST->Right =...
阅读全文
摘要:#define RED 0 #define BLACK 1 typedef struct RedBlackNode{ ElementType Data; RedBlackNode *Left; RedBlackNode *Right; int colour; }; typedef struct RedBlackNode* Root; typedef Root RedBlack...
阅读全文
摘要:typedef struct AVLNode *Position; typedef Position AVLTree; /* AVL树类型 */ struct AVLNode{ ElementType Data; /* 结点数据 */ AVLTree Left; /* 指向左子树 */ AVLTree Right; /* 指向右子树 */ int H...
阅读全文
摘要:#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */ typedef int ElementType; /* 关键词类型用整型 */ typedef int Index; /* 散列地址类型 */ typedef Index Position; /* 数据所在位置与散列地址是同一类型 */ /* 散列单元状态类型,分别对应:...
阅读全文
摘要:个人对k的意义的理解:假设k是某一定值,对于每一次i,j循环,我们都只考虑加入第k个节点对D[i][j](从i到j最短路径)的影响,因为前k-1个节点已经考虑过了。 所以D[i][j] = D[i][k] + D[k][j], 其实D[i][k]与D[k][j]代表的是考虑前k-1个节点过后的最短路
阅读全文
摘要:适用于有向单源最短路径图: 实质:对集合S进行扩大,直至无法扩大,每收集一个点d至集合S,对与该点d直连的点在dist[]中的路径值进行更新。 S = {源点s + 已经确定了最短路径的顶点vi}; 对任一未收录的顶点vi,定义dist[v]为s到v的最短路径长度,但该路径仅经过S中的顶点。 Q1:
阅读全文
摘要:2018年8月30日补充: 看了普林斯顿算法中关于堆的实现,感觉更加形象生动,补充如下: 堆排序是我们所知的唯一能够同时最优地利用空间和时间的方法 在最坏的情况下也能保证使用2NlgN次比较和恒定的额外空间。 复杂度分析:O(nlogn):第一个for循环,初始化堆,为O(n),第二个for循环为O
阅读全文
摘要:一张图表示非递归遍历的实质: 我们如何找到左子树,因为我们先访问根节点,所以根据根节点中保存的左子树的地址,可以向左下访问。 那左子树访问完了,如何回来访问右子树呢? 这就是栈的作用!!!! 栈顶保存着上一次最后遇到的根节点,把栈顶元素弹出,则可以“往回走”,借此可以访问右子树。
阅读全文