
数据结构与算法
数据结构与算法的知识点整理及代码实现
青冥夜雨寒风吹
这个作者很懒,什么都没留下…
展开
-
剑指offer中使用快速幂算法的题目的整理(待更)
剪绳子Ⅱ(medium难度)https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/本题思路及代码的来源:作者:jyd链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/solution/mian-shi-ti-10-i-fei-bo-na-qi-shu-lie-dong-tai-gui/来源:力扣(LeetCode)注:剪绳子Ⅰ(medium难度)传送门原创 2021-01-16 18:15:31 · 152 阅读 · 0 评论 -
快速幂算法
转载自:https://liuyangjun.blog.youkuaiyun.com/article/details/85621386?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control转载 2021-01-16 17:45:28 · 150 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数(经典的TopK问题)
1 类似快速排序的快速选择法(分治法思想)“查找第 k 大的元素”是一类算法问题,称为选择问题。找第 k 大的数,或者找前 k 大的数,有一个经典的 quick select(快速选择)算法。这个名字和 quick sort(快速排序)看起来很像,算法的思想也和快速排序类似,都是分治法的思想。首先回顾快速排序的思路。快速排序中有一步很重要的操作是 partition(划分),从数组中随机选取一个枢纽元素 v,然后原地移动数组中的元素,使得比 v 小的元素在 v 的左边,比 v 大的元素在 v 的右边原创 2020-12-16 13:14:24 · 305 阅读 · 0 评论 -
二叉树的广度优先搜索(BFS)和深度优先搜索(DFS)代码实现(Java)
本文的代码和图表来源于力扣(LeetCode)作者:sdwwld链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/4chong-jie-jue-fang-shi-bfsdfszhong-xu-bian-li-di-/1 二叉树的广度优先搜索(BFS)代码实现:public static void treeBFS(TreeNode root) { //如果为空直接返回 i原创 2020-12-07 23:59:20 · 760 阅读 · 0 评论 -
哈希表的代码实现(Java)
哈希表介绍哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。如下图所示:哈希表一般由:1)数组+链表;2)数组+二叉树构成。以google公司的一个上机题为例创建哈希表:看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当.原创 2020-12-03 18:44:47 · 758 阅读 · 1 评论 -
图的概念,创建及图的深度优先算法(DFS)及图的广度优先算法(BFS)的代码实现(Java)
1 图的介绍原创 2020-12-03 13:31:07 · 345 阅读 · 0 评论 -
多种查找算法详解及其代码实现(Java)
线性查找原创 2020-11-30 20:55:27 · 415 阅读 · 0 评论 -
平衡二叉树(AVL)的介绍及其左右旋转的代码实现(Java)
1 平衡二叉树(AVL)的介绍1.1 二叉排序树可能存在的问题:对于数列{1,2,3,4,5,6},创建一颗二叉排序树(BST),如下图:上图BST存在的问题分析:左子树全部为空,从形式上看,更像一个单链表。 插入速度没有影响。 查询速度明显降低(因为需要依次比较), 不能发挥BST 的优势,因为每次还需要比较左子树,其查询速度比单链表还慢。 解决方案-平衡二叉树(AVL)。1.2 基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search原创 2020-10-30 23:32:03 · 911 阅读 · 1 评论 -
二叉排序树(BST)的介绍及其创建,遍历及删除节点的代码实现(Java)
目录1 二叉排序树的介绍2 二叉排序树的创建和遍历3 二叉排序树的节点的删除1 二叉排序树的介绍二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如对于的数据 (7, 3, 10, 12, 5, 1, 9,2) ,对应的二叉排序树为:2 二叉排序树的创建和遍历本次遍历采用中序遍历,.原创 2020-10-29 18:34:24 · 366 阅读 · 1 评论 -
顺序存储二叉树思路及代码实现(Java)
顺序存储二叉树原创 2020-10-25 16:33:06 · 679 阅读 · 0 评论 -
二叉树的介绍,遍历,查找节点,删除节点及其代码实现(Java)
1 树的介绍树的常用术语(结合示意图理解):节点:A B C D E F G H根节点:A父节点:见图子节点:见图叶子节点 (没有子节点的节点):H E F G节点的权:即为节点的值路径(从root节点找到该节点的路线):层:见图子树:见图树的高度(最大层数):本图为5层森林 :多颗子树构成森林。1.1 二叉树的概念二叉树定义:树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。二叉树的子节点分为左节点和右节点。满二叉树定义:如果该二叉树的所有叶子节点都在最后一层,并且结原创 2020-10-22 21:10:06 · 1185 阅读 · 0 评论 -
数组,链表,树三种存储方式的对比
1 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。2 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)。3 树存储方式的分析能提高数据存储,读取的效率, 比如利用二叉排序树(Binary Sort T.原创 2020-10-17 10:22:49 · 702 阅读 · 0 评论 -
前缀表达式(波兰表达式)介绍及其代码实现(Java)
1 前缀表达式介绍前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 61.1 前缀表达式的计算机求值过程从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。1.2 前缀表达式的计算过程举例说明例如: (3+4)×5-6 对应的前缀表达式就是 - × +原创 2020-10-10 18:36:00 · 6409 阅读 · 0 评论 -
栈的介绍,用数组模拟及用栈实现四则综合计算器(Java)
1 栈1.1 栈的介绍栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 出栈(pop)和入栈(push)的概念(如图原创 2020-10-09 23:50:24 · 397 阅读 · 0 评论 -
单向环形链表与约瑟夫(Josephu)问题的介绍及实现(Java)
1 单向环形链表的介绍原创 2020-10-08 11:51:50 · 337 阅读 · 0 评论 -
双向链表的介绍及其代码实现(Java)
关于单向链表的介绍及代码实现:https://blog.youkuaiyun.com/weixin_40139164/article/details/108919348目录1 双向链表的介绍2 双向链表的分析思路及代码实现2.1双向链表的创建与添加2.2双向链表的删除2.3双向链表中元素的修改2.4双向链表中元素的遍历1 双向链表的介绍双向链表可以向前或者向后查找。而单向链表,只能一个方向查找。 双向链表,可以自我删除。单向链表不能自我删除,需要靠辅助节点 ,所以前面我们单链表原创 2020-10-06 20:53:58 · 454 阅读 · 0 评论 -
单链表介绍及代码实现(Java)
1 链表介绍链表是有序的列表,但是它在内存中的实际存储方式如下:链表是以节点的方式来存储,是链式存储。 每个节点包含 data 域, next 域:指向下一个节点。 如图:发现链表的各个节点不一定是连续存储。 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。单链表(带头结点) 逻辑结构示意图如下2 单链表的分析思路及代码实现2.1单向链表的创建与添加:以下代码使用带head头的单向链表实现 –水浒英雄排行榜管理,通过完成对英雄人物的增删改查操作,展示单链表的原创 2020-10-06 16:24:18 · 2326 阅读 · 1 评论 -
队列介绍及代码实现(Java)
目录1 队列介绍2 模拟队列思路2.1 数组模拟队列2.2数组模拟队列的代码实现及演示:3 环形队列介绍4 模拟环形队列4.1用数组模拟环形队列思路4.2数组模拟环形队列的代码实现及演示:1 队列介绍队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图) 存在的问题:数组只能使用一次就不能使用,达不到复用的效果2 模拟队列思路2.1 数组模拟队列.原创 2020-10-04 00:27:30 · 1038 阅读 · 0 评论