- 博客(11)
- 资源 (6)
- 收藏
- 关注
原创 利用中序+后序 恢复二叉树
要恢复一个二叉树,必须要有一个中序。利用后序得到根,再根据中序将树分成左右两份。然后递归地调用即可。参考代码:注意:此代码未对后序与中序的字符串有效性进行检查。#includeusing namespace std;struct Node{ char value; Node * left; Node * right;};Node * reconstruct(c
2012-04-25 20:35:34 1581
原创 KMP字符串查找算法
查找q是否在p中。先对q进行特征统计。。。比较挫的代码先贴上,以后有精力再改进改进。#includeusing namespace std;/**统计字串的特征比如字串为 const char *q="abcabcd"特征表为int table[]={-1,0,0,0,1,2,3};*/int * createTable(const char *q){ if(
2012-04-25 19:57:06 627
原创 只支持10以下的计算器
参考代码:#include#includeusing namespace std;/**return num2 opt num1*/int cal(int num1, int num2, char opt){ switch(opt) { case '+': return num2+num1; case '-': return num2-num1; case '*':
2012-04-23 23:23:34 595
原创 Dijkstra最短路径算法
基本思路是:选择出发点相邻的所有节点中,权最小的一个,将它的路径设置为确定。其他节点的路径需要保存起来。然后从刚刚确认的那个节点的相邻节点,算得那些节点的路径长。然后从所有未确定的节点中选择一个路径最短的设置为确定。重复上面步骤即可。参考代码如下:void Dijkstra(graph *g,string v){ int n = g->n; int *flag = new int[n];
2012-04-22 18:05:16 836
原创 无权图最短路径
参考代码: 复杂度为O(V+E)void Unweight(struct graph *g,string v){ int *mask= new int[g->n]; int i; int n; int num=0; for(i=0;in;i++) { mask[i]=0; if(VName[i]==v) n=i; } num++; queueq; q.p
2012-04-19 20:28:59 2028 1
原创 拓扑排序+入度检测
拓扑排序: 若有 a->b, 则要求a一定要在b之前打印出来。 思路: 找到一个入度为0的节点,打印出来,把与之相邻的节点入度-1; 重复上面工作。参考代码:void Topsort(graph *g){ int *Indegree = new int[g->n]; int i; /*统计入度*/ for(i=
2012-04-19 18:51:21 1952
转载 邻接表
邻接表 邻接矩阵用二维数组即可存取,比较简单,但除完全图外,一般的图不是任意两个顶点都相邻接,因此邻接矩阵也有很多零元素,特别是当n 较大而边数相对完全图的边(n-1)又少得多时,邻接矩阵仍是很稀疏,这样浪费存储空间。 邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法,类似于树的孩子链表表示法。由于它只考虑非零元素,因而节省了零元素所占的存储空间
2012-04-19 16:35:09 4107
原创 hash表的代码
1、使用分离链接法避免collision参考代码:#include#include#includeusing namespace std;class node{public: string word; int count; node * next;};node * hashTable[700]={};void init(){ int i; for(i=0
2012-04-13 14:52:12 966
原创 在二元树中找出和为某一值的所有路径
从根到树叶, 找出所有路径中 和为给定的路径。 先序遍历,把访问到的节点放入vector中。当递归返回时从vector中删除节点。 参考代码:#include#includeusing namespace std;struct Tree{ Tree(int num):element(num),left(NULL),right(NULL){} int el
2012-04-12 20:05:36 556
转载 二叉查找树 转换成 排序的双向链表
http://www.cnblogs.com/XjChenny/archive/2011/10/01/2197783.html 自己写的代码:#include#includeusing namespace std;class Tree{public: Tree():element(0),left(NULL),right(NULL){} Tree(int nu
2012-04-12 18:38:16 434
原创 最长递增子序列
采用动态规划。使用LIS【】保存包含当前节点的子序列的长度。参考代码:#includeusing namespace std;int num[9]={ 1 ,2 ,4, 7, 4, 3, 1,8 ,1};int find(int *array, int len,int *Pre, int *index){ int i,j; int *LIS =
2012-04-12 00:44:55 672
h.264学习文档(5个文档)
2010-05-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人