2013年10月14日
摘要: /*不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。修改程序: *//*(1)增加插入结点的功能。 *//*(2)将建立链表的方法改为头插入法。 */ 编译 dev-cpp 阅读全文
posted @ 2013-10-14 14:06 smart0326 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 文档下载页面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 阅读全文
posted @ 2013-10-14 14:05 smart0326 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 算法过程 设要排序的数组是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开始向后搜索,即. 阅读全文
posted @ 2013-10-14 14:04 smart0326 阅读(228) 评论(0) 推荐(0) 编辑
摘要: #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); 阅读全文
posted @ 2013-10-14 14:02 smart0326 阅读(217) 评论(0) 推荐(0) 编辑
摘要: Dijkstra算法———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源 阅读全文
posted @ 2013-10-14 14:02 smart0326 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 归并算法(归并排序这周需要用到归并算法, 于是找了找相关的资料, 整理如下:归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。两路归并算法1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合并过程 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小 阅读全文
posted @ 2013-10-14 14:01 smart0326 阅读(878) 评论(0) 推荐(0) 编辑
摘要: 基数排序的方式可以采用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,... 阅读全文
posted @ 2013-10-14 14:00 smart0326 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 我的Partition(),功能是以传入的finish序号的数的数值为分界线,把数组分成两部分,前半的数值都比他小,其余的都比那个值大,并返回分界的序号。这个过程中就操作数组换位,具体见算法注释。而sort函数的工作就是反复的利用Partition函数查找那个中间值,在这个过程中就对数组进行操作,将其分成两段。把一个大的数列改为一个个小的,甚至长度为一的序列,当达到这个条件时,实际上已经排好序了。这一点上和递归函数没区别,因为算法一样。建议按序看我的注释,并且自己举个数列的例子来操作。可以先看Partition()的,因为两个函数是独立的。可以,我就写写算法了。因为这个代码是算法代码而其年久失 阅读全文
posted @ 2013-10-14 13:55 smart0326 阅读(1309) 评论(0) 推荐(0) 编辑
摘要: 回溯法:其求解过程实质是一个先序遍历一棵“状态树”的过程,只是这棵树不是遍历前预先建立的,而是隐含在遍历过程中。题目描述:求含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 阅读全文
posted @ 2013-10-14 13:54 smart0326 阅读(861) 评论(0) 推荐(0) 编辑
摘要: /*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_ 阅读全文
posted @ 2013-10-14 13:43 smart0326 阅读(969) 评论(0) 推荐(0) 编辑