数据结构
文章平均质量分 76
梦在未名湖畔
这个作者很懒,什么都没留下…
展开
-
递归加回溯
1、框架1.1、递归框架function A 结束条件 违法判断 正常逻辑代码 for every situation 递归 切记上面你的违法判断,我们不用实现分情况讨论啥情况下回违法,只需要最后判断是否违法就行了,结束条件一定要弄清楚,其次你写递归的时候最好不要带返回值吧,如果需要返回值的情况下你可以使用全局变量或者用参数传递这个变量!!!(带返回值的递归会比较麻烦一点)1.2、回溯框架function B 结束条件 ...原创 2020-12-03 02:33:46 · 690 阅读 · 1 评论 -
字符串
1、字符串基本:字符串是算法题目中的一个大类,其实c语言对字符的操作并不是很友好,c语言本身并没有封装很多的c语言的函数,但是以下几种基本的函数是我们需要掌握的:1.1、strcpy函数原型:strcpy(str1,str2);功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值返回:str1注意: 1)字符串str2会覆盖str1中的全部字符, 2)字符串str2的长度不能超过str1, 3)拷贝原理:从首元素开始,..原创 2020-11-30 01:55:46 · 2514 阅读 · 1 评论 -
无向图的连通性的判断
对于一个无向图的连通性的判断,我们可以通过读入的边对得出邻接矩阵,然后可以采用Warshall算法得到可达矩阵,那么就可以很简单的判断图的连通性,只要所有的点之间都是相互可达的,那么图就是连通的,反之则不连通。 不过本文想介绍的不是该种方法,下面我们将用Union-find算法来进行图的连通性的判断。该算法的数学基础思想是:我们根据读入的边对进行集合的划分,读...原创 2018-09-14 23:55:46 · 16270 阅读 · 0 评论 -
LeetCode Sum Question
Question 1.两个数求和问题,找出求和等于target的数对,只有一对。Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly o...原创 2018-09-14 23:45:46 · 214 阅读 · 0 评论 -
C语言中的数据溢出
1、char是一个字节,8bit,我们在采用unsigned char的数据类型的情况下,如果我们数据产生溢出(超过2^8)那么我们最终得到的结果将对2^8(256)取余,如:unsigned char x = 0xff;x++;printf("%d\n",++x);输出的结果将是1;而不是257.2、对于signed的整数的溢出,C语言的定义是Undefined Overflow,...原创 2018-09-07 20:40:23 · 28935 阅读 · 0 评论 -
BST的例题
例题一、查找任意BST树的第K小的结点。Solution 1:思想是采用中序遍历int SupkthSmallest(struct TreeNode* root, int k,int *count,bool *flag){ int result = 0; if(!root) return result; result ...原创 2018-07-26 20:36:13 · 352 阅读 · 0 评论 -
红黑树及实现(c语言)
本人看的是《算法》这本书,所以红黑树的理解是一下这样的:个人认为这样比结点标红黑更好理解。很好下面是红黑树的定义:1、红黑树其实是2-3结点树的二叉平衡表示形式。2、红链接均为左连接(左倾红黑树)3、没有任何结点同时连接着两条红链4、红黑树是完美平衡的,也就是任何空连接(NULL)到根节点经过的黑色分支数量是相等的其中2、3都是为了维持是2-3树的二叉平衡形式,4、是为...原创 2018-07-20 21:18:15 · 5662 阅读 · 0 评论 -
BST(二叉搜索树)
BST(Binary Search Tree)目的是为了提高查找的性能,其查找在平均和最坏的情况下都是logn级别,接近二分查找。其特点是:每个节点的值大于其任意左侧子节点的值,小于其任意右节点的值。介绍三个最基本的操作:预备操作:typedef struct node{ int value; char key; int Index; struct node *left; struct ...原创 2018-07-12 20:05:50 · 48480 阅读 · 9 评论 -
B-树的实现(二)C语言实现
虽然前面把伪代码进行了阐述,但是想要真正的编写出来还是非常的不容易,鉴于能力有限,本人的实现版本如下(和伪代码差距有点大,码力差距还是和别人有很大)#include <stdio.h>#include <stdlib.h>#define m 4//B_树的数据结构typedef struct node{ int Numbers; int val[m+1...原创 2018-07-18 20:48:46 · 573 阅读 · 0 评论 -
B-树的实现(一)
B-树(多路平衡搜索树)的定义虽然比较简单,寥寥几条:1.m阶B-树,最多只能有m个分支。2.m阶B-树的关键字个数要介于[m/2](向上取整)-1和m-1之间(根节点除外)3.关键字内部按升序排列4.所有叶子节点一定在同一层根据定义来实现B-树的难点在第二条,这就会导致分裂和合并的情况。图文讲解可以看下面这个博客,非常的详细: http://www.cnblogs.c...原创 2018-07-18 20:35:49 · 332 阅读 · 0 评论 -
AVL树、B-树、RB树、B+树、B*树比较
一:AVL树 也就是平衡二叉树,该二叉树为了优化查找的性能,会让每个结点的左右子树的高度差维持在1以内,也就是小于等于1。因为我们在二叉查找树上查找数据的时候,是类似二分法的,那么我们每次折半的区间长度就会决定了我们查找的效率,从概率的角度讲,在未知的情况下肯定是一半一半获得的效率最高。所以在二叉查找树中,决定查找效率就是树的高度,为什么呢? 其实我们可以这样想,因...原创 2018-07-24 09:53:26 · 1662 阅读 · 0 评论 -
AVL(自平衡二叉树)树的实现(C语言)
AVL树是可以在插入、删除节点之后进行自平衡的树,平衡的定义是结点的左子树和右子树的深度差不超过1,也就:| Deep(LeftChild) - Deep(RightChild)| <= 1,整棵树的平衡也就是树的每个结点都是满足上述情况。那么下面我们要解决问题就是当树在插入数据和删除数据的时候,如果树不平衡了我们该怎么办。上面就是我们在插入或者删除的时候可能导致的树的不平衡的所...原创 2018-07-23 16:25:38 · 5204 阅读 · 0 评论 -
关于指针在函数中赋值的问题
1、最简单的有swap(int a,int b)函数,估计这个大家都是知道的。其实这也是下面要讨论的问题的症结所在,那就是函数的参数和传进的变量之间的关系,我们可以通过程序输出地址发现,参数和传入的变量并不是公用一个地址,也就是参数只是对变量的一个简单的copy。2、看下面一段代码:typedef struct node{ int a; struct node * next;}Nod...原创 2018-07-11 17:04:11 · 2208 阅读 · 0 评论 -
数据结构链表例题(二)
--------------------------------------------例题9----------------------------------------------给定链表L给定一个区间,要求逆置区间的数据。Solution 1利用插入排序的思想,吧需要逆置的区间视为一个逆序的数组需要进行插入排序。public ListNode reverseBetween(ListNode...原创 2018-07-09 22:00:08 · 407 阅读 · 0 评论 -
数据结构链表例题
给定一个链表L,链表中的整数数据是唯一的。给定一个数组G,G中的数据全是链表L中的数,但是顺序可能是打乱的。现在要判断G中的数据在对应链表中的数据位置是否是连接上的,并求出链接上的组数。例如:L:0->7->2->9->4G:{0,9,7,4}结果返回:2,因为{0,7}在L中式连续的,{9,4}在L中是连续的,3个连续或者更多同样算一个。当最后只有一个的情况下是视为一个连...原创 2018-07-09 21:54:19 · 964 阅读 · 0 评论 -
数据结构之链表小结
1.做题考虑全面,空输入,只有一个输入,只有两个输入,相邻的情况,头的情况,末尾的情况!要全面!全面!2.擅长分类讨论并且在讨论的时候归纳出共同点再动手会简单很多,代码也会好写、好看很多。3.单向链表想要从后往前操作有两种方法:递归和栈4.malloc申请的空间及时用free释放,否则容易内存泄漏5.指针始终是指向空间的,多个指针也只是指向的同一个共享空间typedef struct node{ ...原创 2018-07-09 21:49:57 · 677 阅读 · 0 评论