数据结构与算法(Java)
文章平均质量分 89
本专栏会持续更新优化,不断为读者提供更优质的内容
YOLO~~~
这个作者很懒,什么都没留下…
展开
-
七大常见基于比较的排序算法
七大常见基于比较的排序算法1.直接插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序1.直接插入排序/** * 时间复杂度: * 最好情况下【有序的情况下】:O(N) * 最坏情况下[无序的时候->逆序的时候]:O(n^2) * 平均情况下(期望的时间):O(n^2) * 空间复杂度:O(1) * 稳定性:稳定的排序 * * 直接插入排序的特点:越有序越快!-》一般插入排序用到一些要优化的地方 * * 记住:一个稳定的排序,可原创 2022-11-01 10:16:54 · 2181 阅读 · 0 评论 -
BF算法与KMP模式匹配算法(画图详解,C语言实现)
1.目标串不回溯2.KMP算法描述3.next数组定义及实现4.KMP算法实现原创 2022-10-29 17:24:41 · 2642 阅读 · 0 评论 -
散列表(哈希表)知识详解
哈希表知识总结原创 2022-10-28 16:24:52 · 6128 阅读 · 1 评论 -
堆,向下调整算法,向上调整算法,数组建堆,堆排序,Topk问题
堆1.堆的基本概念,操作及实现1.1概念1.2操作---向下调整2.堆的应用---优先级队列2.1操作---入队列2.2操作---出队列2.堆排序3.Topk问题1.堆的基本概念,操作及实现1.1概念1.概念:堆逻辑上是一颗完全二叉树堆物理上是保存在数组中满足任意节点的值都大于其子树中节点的值叫做大堆,或者大根堆满足任意节点的值都小于其子树中节点的值叫做小堆,或者小根堆堆的基本作用是,快速找到集合中的最值2.下标关系已知双亲(parent)下标则:左孩子(left)下标 = 2*p原创 2022-04-10 18:09:20 · 1627 阅读 · 4 评论 -
哈夫曼树(Huffman)的创建,应用哈夫曼编码实现数据压缩
赫夫曼树原创 2022-05-09 16:19:43 · 1426 阅读 · 0 评论 -
树与二叉树(排序二叉树,平衡二叉树,B树)
树与二叉树基础知识(排序二叉树,平衡二叉树,B树)原创 2022-10-29 09:47:02 · 755 阅读 · 0 评论 -
二叉树的基本介绍与常见面试题总结
二叉树1.二叉树前中后序的递归写法1.1前序遍历1.2中序遍历1.3后序遍历2.二叉树的层序遍历2.1层序遍历2.2判断一棵二叉树是否为完全二叉树3.二叉树相关面试题总结3.1求一棵二叉树的节点个数3.2求一棵二叉树叶子节点个数3.3第K层的节点个数3.4 获取二叉树的高度3.5在二叉树中查找值为val的一个节点3.6检查两棵树是否相同3.7判断一棵树是否为另一棵树的子树3.8判断是否为平衡二叉树3.9给定一个二叉树,判断其是否镜像对称3.10寻找最近公共祖先3.11将一个搜索二叉树转变为双向链表(有序)3原创 2022-03-19 16:04:58 · 710 阅读 · 1 评论 -
栈与队列基础知识,使用栈完成计算一个表达式,常见面试题
栈与队列1.栈1.1栈的定义及实现1.2栈的应用2.队列2.1队列的定义及实现1.栈1.1栈的定义及实现1.2栈的应用2.队列2.1队列的定义及实现原创 2022-04-30 08:38:44 · 264 阅读 · 0 评论 -
约瑟夫问题---单向环形链表的应用
1.约瑟夫问题描述Josephu问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列链表知识可参考这篇...原创 2022-04-27 14:51:42 · 115 阅读 · 0 评论 -
稀疏数组的实现
稀疏数组1.稀疏数组的应用场景2.稀释数组转换的思路分析3.稀疏数组代码实现1.稀疏数组的应用场景一个实际需求问题分析:因为该二维数组很多值是默认值0,因此记录了很多没有意义的数据=>稀疏数组基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。处理方法:第一行记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模举例说明:如下一个原始二位数组:转换为稀疏数组:2.稀释原创 2022-04-21 20:53:37 · 225 阅读 · 1 评论 -
前缀,后缀表达式(逆波兰表达式),中缀表达式转为对应的后缀表达式,逆波兰计算器的实现(java)
波兰表达式1.前缀,中缀,后缀表达式规则介绍1.前缀表达式(波兰表达式)1.前缀,中缀,后缀表达式规则介绍1.前缀表达式(波兰表达式)前缀表达式的运算符位于操作符之前例如:(3+4)*5-6对应的前缀表达式就是== - * + 3 4 5 6==前缀表达式的计算机求值从左至右扫描表达式,遇到数字时就将数字压入堆栈,遇到运算符时弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素)完成堆逆波兰表达式的运算 //完成对逆波兰表达式的运算 /* * 1)从左至右扫描,将3原创 2022-10-28 10:21:50 · 814 阅读 · 0 评论 -
栈与队列及其常见面试题
栈与队列1.问题:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效2.用队列实现栈3.栈实现队列4.设计一个支持push pop top操作,并能在常数时间内检索到最小元素的栈5.设计一个循环队列1.问题:给定一个只包括’(’,’)’,’{’,’}’,’[’,’]'的字符串s,判断字符串是否有效有效条件:1.左括号必须用相同类型的右括号闭合2.左括号必须以正确的顺序闭合解:匹配时可能的情况:1.( { } )匹配2.(((()左括号多3.())))右原创 2022-03-05 09:22:09 · 463 阅读 · 1 评论 -
链表常见面试题总结
链表常见面试题总结1. 删除链表中等于给定值 **val** 的所有节点。2. 反转一个单链表。3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链表中倒数第k个结点。5.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 ,且保证顺序不变。7.在一个排序的链表中,存在重复的结点,请删除原创 2022-02-07 14:34:00 · 490 阅读 · 11 评论 -
认识链表以及其常见操作Java代码实现
认识链表以及其常见操作链表二级目录三级目录链表二级目录三级目录原创 2021-12-19 16:15:55 · 2025 阅读 · 21 评论 -
认识顺序表以及其常见操作
顺序表和链表1.顺序表1.1顺序表的概念以及结构1.2顺序表的常见操作1.2.1新增元素1.2.2删除元素1.2.3查找元素1.2.4修改元素链表1.顺序表1.1顺序表的概念以及结构1.2顺序表的常见操作1.2.1新增元素1.2.2删除元素1.2.3查找元素1.2.4修改元素链表...原创 2021-11-14 21:57:42 · 218 阅读 · 0 评论 -
认识时间复杂度和空间复杂度---让你写出优质的代码
时间复杂度和空间复杂度1.算法效率2.时间复杂度2.1时间复杂度的概念2.2大O的渐进表示法2.3常见时间复杂度计算3.空间复杂度1.算法效率2.时间复杂度2.1时间复杂度的概念2.2大O的渐进表示法2.3常见时间复杂度计算3.空间复杂度...原创 2021-10-26 10:47:23 · 347 阅读 · 10 评论