数据结构
文章平均质量分 70
你懂得的天
IOS 开发菜鸟
展开
-
士兵杀敌(四)
南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧。假设起始时所有人的军功都是0.输入 只有一组测试数据。每一行是两个整数T和M表示共有T条指令,M个士兵。(1<=T,M<=10000原创 2013-08-07 17:06:39 · 655 阅读 · 0 评论 -
数的非递归前序遍历
template void PreOrder_2(BinTreeNode *p) //非递归前序遍历 { stack S; while(p!=NULL || !S.empty()) { while(p!=NULL) { coutdata; //访问根结点 S.push(p);原创 2013-06-01 18:54:18 · 546 阅读 · 0 评论 -
字典序算法
字典序排列就是按照字典a-z,1-9的顺序给出字符串的顺序全排列,例如abc的全排列就是从abc一直排到cba。那么给定一个字符串,怎么找出恰好大于该字符串的下一个排列呢?我们考虑如下的步骤:1、假设字符串为p1p2….pn,我们从后往前寻找第一个符合pjj+1条件的字符pj,也就是说,p1p2…pj-1pjpj+1…pn中pjj+1并且pj+1>pj+2>…pn。2、再次原创 2013-11-19 21:35:41 · 855 阅读 · 0 评论 -
判断有向图是否存在环
一无向图的深度遍历中,访问到已访问过的节点,可以得出 “存在环” 的结论;但在有向图中并不是这样。 我把我的算法详细说下,先建立一个顶点颜色表C[N] 0 白色,未被访问过的节点标白色 -1 灰色,已经被访问过一次的节点标灰色 1 黑色,当该节点的所有后代都被访问过标黑色 仍然是按图的节点深度遍历,访问到V时,V若被访问过,那么有2种状态:原创 2013-10-29 16:15:03 · 740 阅读 · 0 评论 -
归并排序
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。下面是我写的源代码 :错误的地方还望大家支出来#include#include#includeusing namespace std;const int MAX = 105;int temp[MAX],a[M原创 2013-10-29 10:09:10 · 467 阅读 · 0 评论 -
贝尔曼-福特算法
贝尔曼-福特算法与迪科斯彻算法类似,都以松弛操作为基础,即估计的最短路径值渐渐地被更加准确的值替代,直至得到最优解。在两个算法中,计算时每个边之间的估计距离值都比真实值大,并且被新找到路径的最小长度替代。 然而,迪科斯彻算法以贪心法选取未被处理的具有最小权值得节点,然后对其的出边进行松弛操作;而贝尔曼-福特算法简单地对所有边进行松弛操作,共|V| − 1次,其中 |V |是图的边的数量。在重复原创 2013-10-28 11:22:27 · 4111 阅读 · 0 评论 -
非递归求树的高度
int BiTreeDepthHierarchy(BiThrTree T) //非递归类层次遍历求二叉树深度{ int depth=0,hp,tp,lc; //hp为已访问的结点数,tp历史入队的结点总数,lc为每层最后一个结点标记 LinkQueue Q; BiThrNode *p; if(T) { p=T; hp=0;tp=1;lc=1; InitQueue(Q);原创 2013-09-17 17:16:05 · 1112 阅读 · 0 评论 -
平衡二叉树的原理
平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,那么AVL就保持住了(BST)的最好时间复杂度O(lo原创 2013-08-16 15:51:52 · 721 阅读 · 0 评论 -
B树
B 树是一种被设计成专门存储在磁盘上的平衡查找树。因为磁盘的操作速度要大大慢于随机存取存储器,所以在分析B 树的性能时,不仅要看动态集合操作花了多少计算时间,还要看执行了多少次磁盘存储操作。 B 树与红黑树(下一篇介绍)类似,但在降低磁盘I/O 操作次数方面要更好一些。许多数据库系统就使用 B 树或 B 树的变形来存储信息,想象一下一棵每个节点包含 1001 个 key 的高度为 2 的 B 树能转载 2013-08-22 18:49:19 · 606 阅读 · 0 评论 -
Dijkstra算法
这是我在网上搜了好多资料拼接的,不容易啊 (写的不好请见谅)Dijkstra算法的要点总结:1.该算法需要两个重要的数据结合结构,集合S、T,S集合中存放已经找到最短路径的节点,T集合中则为S集合的补集,为还未找到阻断路径的节点集合2.算法开始时将源点o放入S集合,并初始化各节点到源点的最短路径,如果之间不相通,距离为无穷大,否则,当前最短路径为到源点o的直接距离3.整个算法过程为原创 2013-11-19 21:27:49 · 3527 阅读 · 0 评论