
数据结构算法
文章平均质量分 69
likee003
这个作者很懒,什么都没留下…
展开
-
AVL树插入结点函数(包括单双旋)
AvlTree Insert( ElementType X, AvlTree T ){ if( T == NULL ) { /* Create and return a one-node tree */ T = malloc( sizeof( struct AvlNode ) );// 分配空间 if( T == NUL翻译 2010-01-12 18:54:00 · 466 阅读 · 0 评论 -
不用任何变量实现strlen
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>#include <stddef.h>#include <iterator>#include <algorithm>using namespace std;int strlen(char* a){ if(0 == *a) retur原创 2010-10-22 23:32:00 · 318 阅读 · 0 评论 -
堆排序
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>using namespace std;#define MAXITEM 100typedef struct { int key; int data; }LineList;void Sift(LineLi原创 2010-10-22 21:51:00 · 301 阅读 · 0 评论 -
删除两个数组交集
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>#include <stddef.h>#include <iterator>#include <algorithm>using namespace std;template <typename InputIterator1, typename原创 2010-10-22 23:26:00 · 403 阅读 · 0 评论 -
字符串大小写转换
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>using namespace std;int main(){ int i; char string[80]; gets(string); for(i=0;i<80;i++) { if ((string[i]>='A')&&(s原创 2010-10-22 17:25:00 · 346 阅读 · 0 评论 -
二叉树叶子结点到根结点的路径查找算法
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>using namespace std;const int MaxSize = 100;typedef struct tnode{ char data; struct tnode *lchild, *rchild;}BTNode;原创 2010-10-01 17:24:00 · 1354 阅读 · 0 评论 -
KMP算法
<br />#include "stdio.h"#include "conio.h"#include "string.h"void getnext(int next[],char s[],int l) /*求出NEXT */{ int i=1,j=0; next[1]=0; while(i<l) { if(j==0 || s[i]==s[j]) { i++;j++;原创 2010-07-08 00:40:00 · 296 阅读 · 0 评论 -
巧用goto代替递归
我们先看一个程序:void PrintList(List L){ if(L != NULL) { PrintElement(L->Element); PrintList(L->Next); }} 这个程序如果空间和时间完全允许的话,完全没有问题,但是,我们注意一下,这里面用了一个递归算法。很不幸,原创 2010-01-08 22:14:00 · 843 阅读 · 0 评论 -
水仙花数算法
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153) 算法如下:#include #include #include #include using namespace std; int main(){ int g_iMax = 0; cout << "原创 2010-03-10 23:25:00 · 611 阅读 · 1 评论 -
各种排序方法比较
首先说明,十全十美的排序方法是没有的,不然,我们学习一种就OK了,还学习其它的方法干嘛呢? 在实际应用中,应该根据实际的情况作出选择。首先考虑排序对稳定性的要求,若要求稳定,则只能在稳定的方法中选取,否则可以在全部的方法中选取;其次考虑其丢弃结点数n的大小,若n较大,则可以在改进的方法中选取,否则在简单的方法中选取;然后再考虑其它的一些因素。大致有以下结论:原创 2009-12-28 13:52:00 · 451 阅读 · 0 评论 -
回溯法解背包问题
问题:设有不同价值、不同我不是的物品n件,求从这n件物品中选取一部分物品的方案,使选中物品中的总我不是不超过指定的限制我不是,但选中物品的价值之和为最大。 设n件物品的我不是分别为w1,w2,...wn,物品的价值分别为v1,v2,...vn。用option[]数组存放最优解,其中每个元素取1或者0,option[i]=1表示第i件物品放在背包中,等于0则表示没有放在背包原创 2009-12-10 12:42:00 · 1160 阅读 · 0 评论 -
回溯法解迷宫问题
迷宫问题中,在寻找路径时,采用的方法通常是:从入口出发,沿某一方向向前试探,若能走通,则继续向前进;如果走不通,则要沿原路返回,换一个方向再继续试探,直到所有可能的能跟都试探完成为止。为了保证在任何位置上都能沿原路返回(回溯),要建立一个后进先出的栈来保存从入口到当前位置的路径。 而且在求解迷宫路径中,所求得的路径必须是简单路径。即在求得的路径上不能有重复的同一块通道。原创 2009-12-09 22:00:00 · 7117 阅读 · 7 评论 -
据说是效率最高的N皇后算法
原贴见:http://topic.youkuaiyun.com/t/20060424/13/4709025.html# 35 楼sharpdew(风刃)回复于 2006-04-25 15:40:37 得分 40 我完整地贴一下: // N Queens Problem // 试探-回溯算法,递归实现转载 2009-12-08 11:04:00 · 987 阅读 · 0 评论 -
n皇后问题---递归法
问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行,不同列,不同左右对角线。 解:皇后问题是算法中的经典问题。设f(i,n)表示在n*n方格棋盘 ,已经旋转好第1个,...,第i-1个皇后,现要放置第i个,...,第n个皇后。旋转前i个皇后的解法f(i,n)和旋转前i+1个皇后的解法f(i+1,n)是相似的。 如何在第k列上找到合适的位置旋转一个皇原创 2009-12-08 10:10:00 · 1374 阅读 · 0 评论 -
穷举法
穷举法也称为枚举法,它的基本思想是不重复、不遗漏地穷举出所有可能的发问,把信息条理化,系统化,或者进行分类,找出规律,引出信息,从中寻找满足条件的结果。 穷举法常用于解决“是否存在”、“有多少种情况”、等问题,对于一些数学问题,穷举法看来是一种“笨”方法,但是它恰好利用了计算机的高速运算特点,可以避免复杂的逻辑推理过程,使问题简单化。 比如:设计一个算原创 2009-12-07 21:45:00 · 513 阅读 · 0 评论 -
迭代法
迭代法是算法设计过程中一川常用的方法,它是一个不断用新值取代变量的旧值,或者由旧值递推出变量新值的过程。迭代机制需要以下一些要素: 1、迭代表达式;2、迭代变量;3、迭代初值;4、迭代终止条件。 当一个问题的求解过程能够由一个初值使用一个迭代表达式进行反复迭代时,便可以用效率极高的重复程序描述,所以迭代也是用循环结构来实现的。只是不数据恢复用一个变量的旧值出原创 2009-12-07 20:43:00 · 319 阅读 · 0 评论 -
求图中顶点间的简单路径
设图G彩邻接表存储,设计一个算法,输出图G中从顶点u到v的长度为l的所有简单路径: 简单路径是指路径上的顶点不重复,从顶点u开始,进行尝试优先搜索,由于在搜索过程中,每个顶点只访问一次,所以这条路径必定是一条简单路径。 设图为: {{0,1,0,1,0}, {1,0,1,0,0}, {0,1,0,1,1}, {1,0,1,0,1}, {0,0,1,1原创 2009-11-30 16:00:00 · 2006 阅读 · 1 评论 -
算法分析
算法分析主要是算法的时间复杂度和空间复杂度的分析,主要是考察算法的时间和空间效率,以求改进算法或者对不同算法的比较。因为一般情况下运算空间是比较充足的,所以一般的算法重点是分析时间复杂度。 算法的执行时间与问题规模有关。问题规模是一个和输入有关的量,比如:数组元素的个数、矩阵的阶数等。算法中一个语句的频度,是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记作T原创 2009-11-28 23:29:00 · 324 阅读 · 0 评论 -
找出字符串中第一个字出现一次的字母
<br />#include<iostream>#include<string>#include<vector>#include<iomanip>#include<stdlib.h>#include <stdio.h>#include <stddef.h>#include <iterator>#include <algorithm>using namespace std;int num[26]={0};int index[26]={0};int mai原创 2010-10-28 19:55:00 · 335 阅读 · 0 评论