
数据结构
文章平均质量分 72
diyhoos
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法
前提void X_Sort(ElementType A[],int N)大多数情况下,为简单起见,讨论从小到大整数排序N是正整数只讨论基于比较的排序(<=>有定义)只讨论内部排序稳定性:任意两个相等的数据排序前后的相对位置不发生改变没有一种排序是任何情况下都表现最好的冒泡排序顾名思义,比较相邻的泡泡大小,当上面的泡泡大时,互换位置。先比较1位和2位的大小,则互换位置。然后比较2位和3位...原创 2018-06-02 18:09:56 · 153 阅读 · 0 评论 -
拓扑排序
拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序。获得一个拓扑序的过程就是拓扑排序。AOV如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph,DAG)每次输出没有前驱顶点的课程。即输出入度为0的顶点。void TopSort(){ for(cnt=0;cnt<|V|;cnt++) { V=未输出...原创 2018-06-02 14:18:32 · 282 阅读 · 0 评论 -
最小生成树(Minimum Spanning Tree)
是一棵树无回路|v|个顶点一定有|v|-1条边是生成树(向生成树中任加一条边都一定构成回路)包含全部顶点|v|-1条边都在图里边的权重和最小贪心算法“贪心”:每一步都要最好“好”:权重最小的边需要约束:只能用图里有的边,只能正海用掉|v|-1条边,不能有回路prim算法——从根结点让一棵小树长大下面用示意图来说明该算法:首先以v1作为根结点然后寻找与这棵树有关系的最小的边,所以将v1与v4的边收进...原创 2018-06-02 12:56:10 · 722 阅读 · 0 评论 -
哈利珀特的考试
最后编个主程序int main(){ MGraph G=BuildGraph(); FindAnimal(G); return 0;}选择动物void FindAnimal(MGraph Graph){ Floyd(Graph,D); MinDist=INFINITY; for(i=0;i<Graph-&g...原创 2018-06-02 10:21:58 · 482 阅读 · 1 评论 -
最短路径问题
最短路径问题的抽象*在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。这条路径就是两点之间的最短路径(shortest path)第一个顶点为源点(source)最后一个顶点为终点(destination)问题分类单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。 (有向)无权图 (有向)有权图多源最短路径问题:求任意两顶点间的最短路径...原创 2018-05-31 13:26:42 · 1011 阅读 · 0 评论 -
建立图
用临接矩阵表示图typedef struct GNode *ptrToGNode;struct GNode{ int Nv;//顶点数 int Ne;//边数 weightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum]; };typedef ptrToGNod...原创 2018-05-30 16:14:08 · 615 阅读 · 0 评论 -
拯救007 &六度空间
void Save007(Graph G){ for(each V in G){ if(!visited[V]&&FirstJump(v)}{ answer=DFS(V); if(answer==YES) break; } } if(answer==YES) output("yes"); ...原创 2018-05-30 14:00:45 · 384 阅读 · 0 评论 -
图
图(Graph):表示“多对多”的关系。包含:一组顶点:通常用V(Vertex)表示顶点集合 一组边:通常用E(Edge)表示边的集合 边是顶点对:(v,w)∈E,其中v,w∈V 有向边<v,w>表示从v指向w的边(单行线) 不考虑重边和自回路抽象数据类型定义类型名称:图数...原创 2018-05-30 11:55:53 · 267 阅读 · 0 评论 -
堆中的路径
堆的表示及其操作#define MAXN 1001#define MINH -10001int H[MAXH],size;void Creat(){ size=0; H[0]=MINH;//设置岗哨}void Insert(int X){ int i; for(i=++size;H[i/2]>X;i/=2) H[i]=H[i/2];...原创 2018-05-29 19:27:26 · 498 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码(Huffman Tree)
如何根据结点不同的查找频率构造更有效的搜索树?哈夫曼树的定义:带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值WK,从根结点到每个叶子结点的长度为lk,则每个叶子结点的带权路径长度之和就是:WPL=wk*lk最优二叉树或哈夫曼树:WPL最小的二叉树。哈夫曼树的构造每次把权值最小的两棵二叉树合并实现代码:typedef struct TreeNode *HuffmanTree;...原创 2018-05-29 18:23:13 · 1379 阅读 · 0 评论 -
快速排序
算法概述分而治之首先在一堆数据中选一个作为主元(pivot element),以此为基准将元素分为2堆,左边的元素小于主元,右边的元素大于主元。这是“分”的过程。接下来是“治”的过程,递归的处理左边,递归的处理右边。然后将3块的结果放在一个数组里,就完成了快速排序。伪码描述void Quicksort(ElementType A[],int N){ if(N<2) return; ...原创 2018-06-05 13:06:24 · 195 阅读 · 0 评论 -
堆
优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是按照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。若采用数组或链表实现优先队列数组:插入——元素总是插入尾部 删除——查找最大(或最小)关键字。从数组中删去需要移动元素 O(n)链表:插入——元素总是插入链表的头部删除——查找最大(或最小)关键字,删去结点 O(1)有序数组:插入——找到合适...原创 2018-05-29 14:57:45 · 136 阅读 · 0 评论 -
单链表的逆转
Ptr Reverse(Ptr head,int K){ cnt=1; new=head->next; old=new->next; while(cnt<K) { tmp=old->next; old->next=new; new=old; old=temp; ...原创 2018-05-29 12:03:56 · 340 阅读 · 0 评论 -
平衡二叉树
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来...原创 2018-05-29 10:22:08 · 231 阅读 · 0 评论 -
二叉搜索树
二叉搜索树(BST,Binary Search Tree):一棵二叉树,可以为空;如果不为空,满足以下性质。1、非空左子树的所有键值小于其根结点的键值。2、非空右子树的所有键值大于其根结点的键值。3、左右子树都是二叉搜索树。二叉搜索树的查找操作FindPosition Find(ElementType X,BinTree BST){ if(!BST) return NULL;//查找失败...原创 2018-05-29 09:43:04 · 243 阅读 · 0 评论 -
归并排序
核心:有序子列的归并要求:将2个排好序的数组放入到第三个数组中,并且是有序的。首先准备3个指针,分别指向3个数组的第一个元素。第一步,比较Aptr指向的元素和Bptr指向的元素的大小,将较小的元素放入Cptr指向的位置。因此将Aptr指向的元素放入到Cptr中。因为改变了A与 C,因此A++向前挪,C++向前挪。继续比较A指针与B指针指向元素的大小,Bptr指向的元素较小,因此将2放入Cptr,...原创 2018-06-04 20:05:09 · 164 阅读 · 0 评论 -
树
1.判定树上每个节点需要的查找次数刚好为该节点所在的层数;2.查找成功时查找次数不会超过判定树的深度;3.n个结点的判定树的深度为[log2n原创 2018-05-28 14:30:49 · 233 阅读 · 0 评论 -
堆排序
要了解堆排序,首先回顾一下选择排序:选择排序 选择排序法是对定位比较交换法(冒泡排序法)的一种改进。选择排序的基本思路是:每一趟在n-i+1(i=1,2,...n-1)个记录中选择关键字最小的记录作为有序序列中第i个记录。基于此思想的算啊主要有简单选择排序、树型选择排序和堆排序。简单选择排序的基本思路:第1趟在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟在待...原创 2018-06-03 10:37:36 · 133 阅读 · 0 评论 -
旅游规划
城市为结点;公路为边:权重1:距离。权重2:收费。单源最短路:Dijkstra-距离。等距离按时收费更新。核心算法:void Dijkastra(Vertex s){ while(1){ V=未收录顶点中dist最小值; if(这样的V不存在) break; collection[V]=true; ...原创 2018-06-02 15:07:36 · 530 阅读 · 0 评论