数据结构
JensLee
这个作者很懒,什么都没留下…
展开
-
值传递,地址传递与引用传递
一. 三道考题开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)1. 考题一:程序代码如下:void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d\n”,x,y)}void main(){ int a=4转载 2017-07-02 21:15:36 · 1128 阅读 · 0 评论 -
折半查找
递归算法:int binarysearch(int *a,int key,int low,int high){ if(low>high) return 0; int mid = (low+high)/2; if(a[mid]==key) return mid; if(a[mid]>key) binarys原创 2017-09-28 21:01:51 · 388 阅读 · 0 评论 -
线索二叉树
线索化二叉树相对于之前的树的遍历,在树的定义上增加了两个值,一个是ltag,另外一个是rtag。ltag代表着这个节点的是否有右孩子,如果有,则ltag=1,p->lchild指向的是p的左孩子。如果没有左孩子,那么ltag=0,p->lchild指向的是p的前驱节点。rtag代表着这个节点的是否有右孩子,如果有,则rtag=1,p->rchild指向的是p的右孩子。如果没有左原创 2017-08-27 04:15:39 · 1715 阅读 · 3 评论 -
20.Valid Parentheses 栈的应用:括号匹配
十分简单的括号匹配,用栈来操作就可以了#define max_size 1000001class Solution {public: typedef struct SqStack{ int top; char data[max_size]; }Stack; void Init_Stack(St原创 2017-09-23 21:06:05 · 385 阅读 · 0 评论 -
树的遍历(先中后序,非递归,层次遍历)
树的遍历分为先序遍历,中序遍历以及后续遍历。其中分为递归形式与非递归形式,及层次遍历。先序遍历:首先访问根节点,然后访问左子树,最后访问右子树。void PreOrder(BiTree T){ if(p) { visit(p); PreOrder(p->lchild); PreOrder(p->rch原创 2017-08-23 22:19:40 · 873 阅读 · 0 评论 -
哈夫曼树
哈夫曼树的目的是构造带权路径最小的树,权值大的节点在上方,权值小的节点在下方。例如在传讯编码中,用到了A,B,C,D,四种编码,每个编码使用的频率不一样,分别是0.1, 0.3, 0.4, 0.2。那么可以解释为表示C的编码越短,总编码长度就越短。例如在8各节点中,各自的权重是1,23,50,87,63,10,17,33.构造哈夫曼树的步骤是:1.从节点集F中选取两个节点值最小原创 2017-08-27 04:52:00 · 645 阅读 · 0 评论 -
关键路径详解
在这里我们引入AOV(Activity-On-Edge)网概念,用顶点表示事件,用边来表示活动。区别于AOV网,AOE网的边是有权值的,代表完成事件的时间。你需要先了解拓扑排序的有关知识。具体详见博文:http://blog.csdn.net/lee18254290736/article/details/77430334在这里引入几个概念:起始点称作源点终止点称作汇点原创 2017-08-20 17:59:05 · 2537 阅读 · 1 评论 -
拓扑排序
在这里我们引入AOV(Activity-On-Vertex)网,图的顶点代表活动,其有向边代表完成Vj之前Vi必须先完成。对于一个工程,我们首先将这个大工程分为很多小项目。例如学习计算机专业,我们要学习高等数学,大学英语,程序设计基础,c++,计算机网络,操作系统,计算机组成原理,编译原理。有的课程学习需要先学习完先导课程。我们给每个科目编上编号:高等数学 1大学英语原创 2017-08-20 17:12:05 · 501 阅读 · 0 评论 -
最小生成树-Prim算法
从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。原创 2017-08-19 14:35:02 · 656 阅读 · 0 评论 -
最小生成树-kruskal算法(克鲁斯卡尔算法)
克鲁斯卡尔解决最小生成树的问题,克鲁斯卡尔算法的思想是将所有边按照权值,从小到大排列起来,然后依次从小到大选择边,如果选择的边会造成回路,那么放弃选择一个更大的边。如图所示:首先获取,边权值为1;下一步获取,权值为2;下一步获取,权值为3;下一步获取,权值为4;最后获取,权值为5;这样最小生成树就完成了。原创 2017-08-19 15:25:46 · 962 阅读 · 0 评论 -
二叉搜索树(C语言)
二叉搜索树讲解学习二叉搜索树的过程中,对于删除操作中的两个节点都存在的情况进行代码编写时,出现了疑惑,所以我着重讲解一下删除操作代码。首先进行数据的声明:#include#includetypedef int data_type; //声明元素类型typedef struct bst_node{ //node节点值 data_type dat原创 2017-06-27 11:43:36 · 766 阅读 · 0 评论 -
AVL树详解
下面讲解AVL树的C语言代码实现:1.首先是定义:#define LH 1#define EH 0#define LH -1#define TRUE 1#define FALSE 0第一个LH是左子树比右子树高1,EH是两棵子树高度相同,RH代表右子树比左子树高一个节点。2.二叉树节点声明:typedef struct BiTNode //二叉树生命 int da原创 2017-07-05 20:44:16 · 630 阅读 · 0 评论 -
KMP入门级别算法详解--终于解决了(next数组详解)
对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(m+n)。设主串为ptr="ababaaababaa";,要比较的子串为a=“aab”;KMP算法用到了next数组,然后利用next数组的值来提高匹配速度,我首先讲一下next数组怎么求,之后再讲匹配方式。next数组详解首先是理解KMP...原创 2017-08-16 22:55:36 · 77284 阅读 · 30 评论