数据结构
暴走的山交
已经步入社会的java程序员,希望前途一片光明,努力努力再努力!
展开
-
广义表中 GetHead() 和 GetTail()
GetHead是取广义表的第一个元素,要去掉一个"()",而GetTail是除掉第一个元素剩下的元素组成的广义表,也就是除掉第一个元素,再把剩余的元素"()"。举个例子:GetHead【((a,b),(c,d))】→(a,b)GetHead【GetTail【((a,b),(c,d))】】→GetHead【((c,d))】→(c,d)GetHead【GetTail【GetHead【((a,b),(c,d))】】】→GetHead【GetTail【(a,b)】】→GetHead【(b)】→bGet原创 2020-12-26 23:07:07 · 20404 阅读 · 5 评论 -
[by暴走的山交君]B树、B+树详解
前言首先,为什么要总结B树、B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树),理解不透彻B树,则无法理解数据库的索引机制;接下来将用最简洁直白的内容来了解B树、B+树的数据结构另外,B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树转载 2020-12-13 23:17:38 · 438 阅读 · 0 评论 -
下列二叉树中,可能成为折半查找判定树(不含外部结点)的是()向上/下取整
答案:A 答案解析: 折半查找判定树实际上是一棵二叉排序树,它的中序序列是一个有序序列。可以在树结点上依次填上相应的元素,符合折半查找规则的树即是所求。 B选项4、5相加除二向上取整,7、8相加除二向下取整,矛盾。C选项,3、4相加除二向上取整,6、7相加除二向下取整,矛盾...转载 2020-12-13 15:58:41 · 5555 阅读 · 3 评论 -
折半查找判定数及平均查找长度(一定要看这 能看懂的)
折半查找判定数及平均查找长度 折半查找的过程看,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。通常称这个描述折半查找二叉树的过程称为折半查找判定树。 例如:长度为10的折半查找判定树的具体生成过程: 都遵循这个规律,左孩子结点<根结点<右孩子结点 (1)在长度为10的有序表中进行折半查找,...转载 2020-12-13 15:10:46 · 13315 阅读 · 3 评论 -
[by暴走的山交君][剑指Offer系列] 53 - I 在排序数组中查找数字
剑指 Offer 53 - I. 在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0java解法一:class Solution { public int search(int[] nums, int target) { int temp=0; for原创 2020-12-12 20:37:47 · 179 阅读 · 0 评论 -
[by暴走的山交君][剑指Offer系列] 52 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为原创 2020-12-12 18:14:10 · 174 阅读 · 0 评论 -
[by暴走的山交君][剑指Offer系列] 05 替换空格
剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."java解法一:class Solution { public String replaceSpace(String s) { int length = s.length(); char[] arr = new char[length*3]; int原创 2020-12-12 16:39:15 · 163 阅读 · 0 评论 -
[by暴走的山交君][剑指offer系列] 03 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 java解法一:class Solution { public int findRepeatNumber(int[] nums) { int[] arr = new int[nums.l原创 2020-12-08 14:36:53 · 171 阅读 · 0 评论 -
KMP算法中next数组及改进的kmp算法nextval数组的手工计算方法
KMP算法是模式匹配专用算法。它是在已知模式串的next或nextval数组的基础上执行的。如果不知道它们二者之一,就没法使用KMP算法,因此我们需要计算它们。KMP算法由两部分组成:第一部分,计算模式串的next或nextval数组。第二部分,利用计算好的模式串的nextval数组,进行模式匹配。 KMP算法中有next数组和nextval数组之分。...转载 2020-12-06 19:20:17 · 1458 阅读 · 0 评论 -
(栈的应用)中序表达式转换成后序表达式问题
中序表达转换成后序表达式的方法:从左到右读取该中弱序表达式: 1.若是操作数,则直接输出. 2.若是运算符: (1)若该运算符为"(",则直接入栈. (2)若该运算符为")",则取出堆栈中的运算符,直到"("时. (3)其它: 按优先级比较,如果大于或等于堆栈中当前的运算则压入栈中,否则直接输出. (4)检查栈是否非空,如果非空,则输出所有值,直到空为止.*、/、%的优先级当然比+、-高了例如:中序表达式(23+34*45/(5+6+7))转换成后序表达式23 34 45 * 5 6原创 2020-12-04 22:58:14 · 1372 阅读 · 1 评论