随笔分类 -  尚硅谷数据结构练习

C#数据结构的练习
摘要:KMP算法是现阶段我接触到最难理解的算法,作为暴力匹配算法的改进版,特别是其中涉及到的回溯,很难懂,本篇博客以我的理解记录KMP算法 一、KMP算法是BF算法的改进,其改进思路为:当模式串与目标串失配时,不回溯到目标串的+1位置,具体怎么做下面说 举个实例:有目标串“ABCDABCDABDE”和模式 阅读全文
posted @ 2020-11-09 10:07 这总没有了吧 阅读(65) 评论(0) 推荐(0)
摘要:二叉排序树可能出现的问题:左子树过高或右子树过高,为了解决这种情况采用二叉平衡树树 二叉平衡树:可以看成将二叉排序树高的一边子树“往上提了一下”,即将该边子树的第一个从上至下的第一个结点作为新的根节点 原来的根节点放到另一边补充矮的子树的高度了。 当然还有特殊情况: 如果当前结点的右子树的左子树的高 阅读全文
posted @ 2020-11-06 21:48 这总没有了吧 阅读(193) 评论(0) 推荐(0)
摘要:二叉排序树定义: 1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3. 它的左、右子树也分别为二叉排序树。 二叉排序树的常用方法: 添加结点:类似二叉树 遍历:所有遍历和普通二叉树一样 删除结点:重点!!!! 阅读全文
posted @ 2020-11-06 21:36 这总没有了吧 阅读(58) 评论(0) 推荐(0)
摘要:大顶堆的定义:每一个父节点都大于其子结点,根结点是最大的结点 数组转换为堆:层次遍历,第n层填满2^(n-1)次个,最后一层可以填满也可以不填满 第i个结点的左子结点为2*i+1 右子结点为2*i+2 堆结点的基本思想:将数组构造为大顶堆,把根结点放到无序数组的最后 剩余的元素无序,继续构造大顶堆, 阅读全文
posted @ 2020-11-02 11:05 这总没有了吧 阅读(59) 评论(0) 推荐(0)
摘要:二叉树的线索化是指给二叉树加左右两个指针域(称为线索),可以提高空间利用率。 一般先规定好遍历顺序,确定每个结点的前驱和后继 即遍历得到的顺序中前后结点,下面都以中序遍历为例。 规定:左指针域指向该结点的左子结点(或前驱),右指针指向该结点的右子结点 中序遍历得到的第一个结点为首结点,前驱为NULL 阅读全文
posted @ 2020-11-01 10:47 这总没有了吧 阅读(91) 评论(0) 推荐(0)
摘要:哈希表是数组+链表的集合 重点是理解由链表组成的数组和散列函数(取模法) 阅读全文
posted @ 2020-10-31 11:07 这总没有了吧 阅读(35) 评论(0) 推荐(0)
摘要:查找的算法主要有几种:二分查找,插入查找,斐波那契查找。注:所有的查找算法都是在有序数组中 二分查找:顾名思义,先从中间值开始查找,然后不断逼近,类似高中的二分法 二分查找完整代码如下: public static int BinarySearch(int[] arr, int left, int 阅读全文
posted @ 2020-10-28 21:21 这总没有了吧 阅读(151) 评论(0) 推荐(0)
摘要:基数排序的本质是比相应位数上的值,如果位数不足则用0补齐的一个排序算法,该算法时间复杂度很低,但空间复杂度很高,是典型的空间换时间算法 完整代码如下: public static void radixSort(int[] arr) { int max = arr[0];//假设第一个为最大值 //f 阅读全文
posted @ 2020-10-28 18:19 这总没有了吧 阅读(62) 评论(0) 推荐(0)
摘要:归并排序是冒泡排序的优化算法,它采用了分治法的思想,使用递归将其解决,以数组{0,3,2,9,6}为例 分治法的基本思想:将一个大问题分割成若干个类似的小问题,解决完小问题后再将小问题组合大问题 分:用递归法 取mid=(left+right)/2 先递归左子表再递归右子表 当left>=right 阅读全文
posted @ 2020-10-27 20:39 这总没有了吧 阅读(85) 评论(0) 推荐(0)
摘要:快速排序是冒泡排序的优化算法,其步骤是: 1、找到一个基准数p(选中间随机数可以避免快速排序最坏情况) 2、设置左右两个指针,然后左指针l往右找比基准数大的(或相等)的数,右指针r往左找比基准数小的(或相等)的数,两个指针交换 所在位置的元素后,继续搜索直到左右指针相遇(即跳出循环条件 l=r) 注 阅读全文
posted @ 2020-10-26 09:44 这总没有了吧 阅读(37) 评论(0) 推荐(0)