10 2013 档案
摘要:/*不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。修改程序: *//*(1)增加插入结点的功能。 *//*(2)将建立链表的方法改为头插入法。 */ 编译 dev-cpp
阅读全文
摘要:文档下载页面http://download.csdn.net/detail/yedeqixian/4209500 80页在讲KMP算法的开始先举了个例子,让我们对KMP的基本思想有了最初的认识。目的在于指出“由此,在整个匹配的过程中,i指针没有回溯,”。我们继续往下看:现在讨论一般情况。假设 主串:s: ‘s(1) s(2) s(3) ……s(n)’ ; 模式串 :p: ‘p(1) p(2) p(3)…..p(m)’把课本上的这一段看完后,继续现在我们假设 主串第i个字符与模式串的第j(jk 满足下列关系式:(k#include #include using namespace std;inl
阅读全文
摘要:算法过程 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];3)从J开始向前搜索,即由后开始向前搜索(J=J-1即J--),找到第一个小于key的值A[j],A[j]与A[i]交换;4)从I开始向后搜索,即.
阅读全文
摘要:#include#includeusing namespace std;int n;typedef int ElemType;typedef struct LNode{ ElemType elem; LNode *next; }LNode,*LinkList;int InitList(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(0); L->next=NULL; return 1;} int CreateAscend(LinkList &L,int n){ int i=1; if(nelem);
阅读全文
摘要:Dijkstra算法———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源
阅读全文
摘要:归并算法(归并排序这周需要用到归并算法, 于是找了找相关的资料, 整理如下:归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。两路归并算法1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合并过程 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小
阅读全文
摘要:基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 以LSD为例,假设原来有一串数值如下所示: 73, 22, 93, 43, 55, 14, 28, 65, 39, 81 首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中: 0 1 81 2 22 3 73 93 43 4 14 5 55 65 6 7 8 28 9 39 接下来将这些桶子中的数值重新串接起来,成为以下的数列: 81,...
阅读全文
摘要:我的Partition(),功能是以传入的finish序号的数的数值为分界线,把数组分成两部分,前半的数值都比他小,其余的都比那个值大,并返回分界的序号。这个过程中就操作数组换位,具体见算法注释。而sort函数的工作就是反复的利用Partition函数查找那个中间值,在这个过程中就对数组进行操作,将其分成两段。把一个大的数列改为一个个小的,甚至长度为一的序列,当达到这个条件时,实际上已经排好序了。这一点上和递归函数没区别,因为算法一样。建议按序看我的注释,并且自己举个数列的例子来操作。可以先看Partition()的,因为两个函数是独立的。可以,我就写写算法了。因为这个代码是算法代码而其年久失
阅读全文
摘要:回溯法:其求解过程实质是一个先序遍历一棵“状态树”的过程,只是这棵树不是遍历前预先建立的,而是隐含在遍历过程中。题目描述:求含n个元素的集合的幂集。例:A={1,2,3},则A的幂集为{{1,2,3},{1,2},{1, 3},{2,3},{1},{2},{3},{}}解题思路:求幂集的过程可看成是依次对集合A中的元素进行取或舍的过程。1. 选择合适的数据结构——假设以线性表表示集合。2. 树根结点表示幂集元素的初始状态(空集),叶子结点表示终结状态(幂集的元素),第i层表示已对前i-1个元素进行了取舍的当前状态编码:#include "stdafx.h"#include
阅读全文
摘要:/*http://1wangxiaobo@163.com数据结构C语言版 迪杰斯特拉算法P189http://1wangxiaobo@163.com编译环境:Dev-C++ 4.9.9.2*/#include #include #include #include // 迪杰斯特拉算法的实现#define MAX_NAME 5// 顶点字符串的最大长度+1#define MAX_INFO 20// 相关信息字符串的最大长度+1typedef int VRType;// 顶点关系的数据类型#define INFINITY INT_MAX// 用整型最大值代替∞#define MAX_VERTEX_
阅读全文
摘要:算法的数据结构弗洛伊德算法采用图的带权邻接矩阵存储结构。算法基本思想假设求顶点Vi到Vj的最短路径。弗洛伊德算法依次找从Vi到Vj,中间经过结点序号不大于0的最短路径,不大于1的最短路径,…直到中间顶点序号不大于n-1的最短路径,从中选取最小值,即为Vi到Vj的最短路径。算法具体描述若从Vi到Vj有弧,则从Vi到Vj存在一条长度为弧上权值(arcs[i][j] )的路径,该路径不一定是最短路径,尚需进行n次试探。首先考虑从Vi到Vj经过中间顶点V0的路径(Vi,V0,Vj)是否存在,也就是判断弧(Vi,V0)和(V0,Vj)是否存在。若存在,则比较(Vi,Vj)和(Vi,V0,Vj)的路径长度
阅读全文
摘要:#defineLT(a,b)((a)>r[n].key;cout>r[n].name;n++;c=getchar();}Create_SqTable(T,n);}//思想://先将整个序列分成若干个子序列,再对子序列进行直接插入排序//待到子序列基本有序,则对全体记录进行一次直拉插入排序voidShellInsert(SSTable&L,intdk){//dk是前后记录的增量intj;for(inti=dk+1;i0&<(L.elem[0].key,L.elem[j].key);j-=dk)L.elem[j+dk]=L.elem[j];L.elem[j+
阅读全文
摘要:/*1wangxiaobo@163.com数据结构C语言版 有向图的十字链表存储表示和实现P165编译环境:Dev-C++ 4.9.9.2*/#include #include typedef char InfoType;#define MAX_Info 80 // 信息字符串最大长度+1#define MAX_VERTEX_NAME 5 // 顶点字符串最大长度+1typedef char VertexType[MAX_VERTEX_NAME];// 有向图的十字链表存储表示#define MAX_VERTEX_NUM 20typedef struct ArcBox{int tailvex,
阅读全文
摘要:数据结构C语言版表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了。他只是比对方更珍惜这份感情。/*数据结构C语言版表插入排序算法10.3P267-P270编译环境:Dev-C++4.9.9.2*/#include#include//静态链表类型#defineSIZE100//静态链表容量typedefintKeyType;//定义关键字类型为整型typedefintInfoType;//定义其他信息的类型typedefstruct{KeyTypekey;//关键字项InfoTypeotherinfo;//其它数据项,具体类型在主程中定义}RedType;//记录类型ty
阅读全文
摘要:/*数据结构C语言版 弗洛伊德算法P191编译环境:Dev-C++ 4.9.9.2*/#include #include #define MAX_NAME 5// 顶点字符串的最大长度+1#define MAX_INFO 20// 相关信息字符串的最大长度+1typedef int VRType;// 顶点关系的数据类型#define INFINITY INT_MAX// 用整型最大值代替∞#define MAX_VERTEX_NUM 20// 最大顶点个数typedef char InfoType;// 信息的类型typedef char VertexType[MAX_NAME];// 顶点
阅读全文
摘要:#include”stdio.h“#include“conio.h”#include”assert.h“#include“stdlib.h”#defineMAPMAXSIZE100//地图面积最大为100x100#defineMAXINT8192//定义一个最大整数,地图上任意两点距离不会超过它#defineSTACKSIZE65536//保存搜索节点的堆栈大小#definetile_num(x,y)((y)*map_w+(x))//将x,y坐标转换为地图上块的编号#definetile_x(n)((n)%map_w)//由块编号得出x,y坐标#definetile_y(n)((n)/map_
阅读全文
摘要:#include#include#include#defineEQ(a,b)((a)==(b))#defineLT(a,b)((a)(b))#defineLH+1//左高#defineEH0//等高#defineRH-1//右高#defineNULL0//http://1wangxiaobo@163.com/////////////////////////// 定义结构体 /////////////////////////// typedefstructBSTNode{intdata;intbf;//结点的平衡因子structBSTNode*lchild,*rchild;//左、右孩子指针}B
阅读全文
摘要:作者: 码农1946来源: 博客园发布时间: 2013-10-09 11:37阅读: 4556 次推荐: 41 原文链接 [收藏] 好吧,我承认我标题党了,不过既然你来了,就认真看下去吧,保证你有收获。 我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的...
阅读全文

浙公网安备 33010602011771号