数据结构与算法
文章平均质量分 76
亡鸿
一zhi在流浪的鸿雁
展开
-
算法设计与分析基础:简单算法入门
1.欧几里得算法求最大公约数欧几里得算法基于的方法是重复应用以下等式,直到m mod n等于0.gcd(m,n) = gcd(n,m mod n).gcd(m,0) = m,m最后的取值也就是m和n的初值的最大公约数举例:gcd(60,24) = gcd(24,12) = gcd(12,0) = 12欧几里得算法gcd(m,n)描述:1)如果n = 0,返回m的值作为结原创 2014-05-03 08:35:48 · 491 阅读 · 0 评论 -
动态查找树
动态查找表:表在查找过程中动态生成。 如果查找成功,返回。失败,就将新的记录插入到表中。1.二叉排序树 or 二叉查找树 Binary Sort Tree性质:1.或是空树,或具有以下性质 2.左子树的所有结点值都小于根节点值 3.右子树的所有结点值都大于根节点值 4.它的左右子树也分别为二叉排序树查找过程原创 2014-04-08 16:26:05 · 266 阅读 · 0 评论 -
静态查找表
查找表(Search table)静态查找表: 只进行查找操作动态查找表: 在查找表上可以进行删除和插入操作1.静态查找表的顺序查找int Search_Seq(SSTable *T, KeyType key){ T->elem[0].key = key; for(i = T->length;!EQ(T->elem[i].key,T->elem[0].k原创 2014-04-08 16:24:06 · 291 阅读 · 0 评论 -
图的连通性
1.无向图的连通性假设以孩子兄弟链表表示森林的存储结构typedef struct CSNode{ ElemType data; struct CSNode *firstchild , *nextsibling;}CSNode,*CSTree;尝试用深度优先生成非连通图的森林:算法基本思路://生成森林的每一棵树的根节点通过nextsibling组成的链表,然后原创 2014-04-05 17:07:29 · 256 阅读 · 0 评论 -
图的存储方式
图:graph图的基本概念:顶点vertex,n个顶点无向图 :Undigraph,边edge,边的数目取值:e = 0--(n*(n-1))/2 e = (n*(n-1))/2 无向完全图有向图:Digraph,弧头head(终端点),弧尾tail(起始点) 弧的数目取值:e = 0--(n*(n-1) e = n原创 2014-04-05 17:13:32 · 192 阅读 · 0 评论 -
线索二叉树
有n个结点的二叉树必然有n+1个空链域。(n个结点的二叉树有n-1个链域)线索二叉树中的规定:1.如果结点有左孩子,让其lchild指向左孩子;否则,让其lchild指向其前驱2.如果结点有右孩子,让其rchild指向右孩子;否则,让其rchild指向其后继这样就需要在原有的二叉树结点结构上,增加两个域lchildltagdatartagrchild定义:原创 2014-04-05 17:08:28 · 235 阅读 · 0 评论 -
内部排序全览
排序方法的稳定性:如果两个相同的关键字在排序前后顺序不变,认为是稳定的排序方法,反之,则是不稳定的排序方法。两类排序方法:1.内部排序:待排序的记录放在计算机的随机存储器中进行的排序2.外部排序:待排序的记录数量很大,以致内存不能一次性容纳所有的记录,在排序的过程中需要访问外存内部排序方法五大类:插入排序,交换排序,选择排序,归并排序,计数排序按照工作量来区分:1.简单原创 2014-04-05 17:04:41 · 223 阅读 · 0 评论 -
算法设计的一般方法概览
1.随机法随机法依赖于随机数的统计特性。一个应用随机法的例子是快速排序。随机选择一个值作为划分的依据,常被称为枢轴,将小于或等于枢轴的划在一堆,而大于枢轴的划在另一堆,重复这种划分,直到只有一个元素。快速排序的平均性能不错,因为随机数的正态分布的结果是相对平衡的。2.分治法分治法包括三个步骤:# 分解:将数据分解为更小、更容易管理的部分# 求解:对每一个分解的部分进行处原创 2014-04-06 15:07:09 · 243 阅读 · 0 评论 -
赫夫曼树
赫夫曼树,又称最优二叉树,是带权路径最短的树。基本概念:路径:一个结点到另一个结点之间的分支构成两点间的路径路径长度:分支的数目树的路径长度:根结点到树上每一个结点的长度之和 =》完全二叉树是路径最短的树结点的带权路径长度:结点到根节点的路径长度与结点上权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和。构造赫夫曼树的赫夫曼算法: 1.根据给点的原创 2014-04-05 17:12:40 · 314 阅读 · 0 评论 -
串的模式匹配
子串的定位操作通常称作串的模式匹配。Index(S,T,pos); T被称为模式串。直观算法:int Index(String S,String T,int pos){ i = pos; j = 1; lenS = strlen(S); lenT = strlen(T); while(i if(S[i] == T[j]){ ++i; ++j;} e原创 2014-04-05 22:20:58 · 323 阅读 · 0 评论 -
树和森林表示法
树的三种常用链表结构1.双亲表示法#define MAX_TREE_SIZE 100typedef struct PTNode{ TElemType dat; int parent; //双亲结点}PTNode;typedef struct{ PTNode nodes[MAX_TREE_SIZE]; int n; //结点个数}P原创 2014-04-05 17:16:19 · 300 阅读 · 0 评论 -
图的遍历
图的遍历方式:图的遍历算法是图的连通性问题、拓扑排序、求关键路径等问题的基础。1.深度优先搜索Depth First Search DFS树的先根遍历的推广。Boolean visted[MAX]; //使用访问标识数组Status (*VisitFunc)(int v);void DFSTraverse(Graph G,Status (*Visit)(int v)){原创 2014-04-05 17:14:45 · 398 阅读 · 0 评论 -
哈希表
哈希表支持一种最有效的检索方法:散列。从根本上,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素。哈希表的基本思想:通过一个哈希函数,在所有可能的键和槽位之间建立一张映射表。哈希函数每次接受一个键将返回与键对应的哈希编码或哈希值。键的数据类型可能是多种多样,但哈希值的类型只能是整型。由于计算哈希值和在数组中进行索引都只消耗固定的时间,因此哈希表的原创 2014-04-11 16:14:07 · 284 阅读 · 0 评论