
数据结构与算法
笑哈皮
Null
展开
-
深度优先遍历二叉树(中序、前序、后序)
深度优先遍历二叉树(中序、前序、后序)递归方法迭代方法原创 2022-03-31 22:28:47 · 133 阅读 · 0 评论 -
平衡二叉树(java代码实现)
平衡二叉树特点平衡二叉树就是在二叉排序树的基础上保持`平衡`:**一颗空树**或**它的左右两个子树的高度差的绝对值不超过1**,并且**左右两子树都是一颗平衡二叉树**平衡方法在添加完成一个树节点后,则做判断进行调整,若不平衡,则做出以下处理1. (右子树的高度-左子树的高度) > 1 再进行判断 ①如果**它的右子树的左子树的高度大于它的右子树的右子树的高度**,则**先对右子结点进行右旋转**,**然后再对当前结点进行左旋转**左旋转右旋转原创 2022-01-07 09:24:30 · 934 阅读 · 1 评论 -
二叉排序树(java代码实现)构建二叉排序树,遍历二叉排序树,查找结点,删除结点
二叉排序树(java代码实现)构建二叉排序树,遍历二叉排序树,查找结点,删除结点定义二叉排序树删除结点的方法和思路删除结点有三种情况- **要删除的结点是叶子结点**1. 需求先去找到要删除的结点 targetNode2. 找到targetNode 的 父结点 parent 3. 确定 targetNode 是 parent的左子结点 还是右子结点4. 根据前面的情况来对应删除原创 2022-01-06 17:17:14 · 834 阅读 · 0 评论 -
哈夫曼树(java代码实现)
哈夫曼树(java代码实现)霍夫曼树HuffmanTree实现步骤1. 首先将树节点进行排序,放入一个容器中2. 取出最小的两个树节点,制造出一个父节点,组成一个二叉树3. 在容器中删除最小的两个结点,将生成的父节点加入容器中4. 对容器进行重新排序,重复1-2-3操作,直到容器中只留下root结点(最终父节点或wpl的最终值)原创 2022-01-05 20:58:39 · 547 阅读 · 0 评论 -
堆排序(java代码实现)
堆排序(java代码实现)完全二叉树实现堆排序原创 2022-01-05 13:10:22 · 247 阅读 · 0 评论 -
中序线索化二叉树及遍历线索二叉树(java代码实现)
中序线索化二叉树及遍历线索二叉树(java代码实现)原创 2022-01-04 21:08:59 · 333 阅读 · 0 评论 -
顺序存储二叉树(java代码实现)
顺序存储二叉树(java代码实现)思路1. 先了解顺序存储二叉树的特点 - 顺序二叉树的实现用完全二叉树的特性 - 第n个元素的左子结点为2n+1 - 第n个元素的右子结点为2n+2 - 第n个元素的父结点为(n+1)/2 - n代表二叉树的第几个元素,从0开始(和数组一样)2. (index * 2 + 1) < arr.length 表示为左部分3. (index * 2 + 2) < arr.length表示为右部分代码原创 2022-01-03 20:59:39 · 688 阅读 · 0 评论 -
删除二叉树节点(递归实现)
删除二叉树节点(递归实现)原创 2022-01-03 20:33:27 · 1687 阅读 · 1 评论 -
二叉树前序、中序、后序遍历(java代码实现)
二叉树前序、中序、后序遍历(java代码实现)原创 2021-12-23 22:18:22 · 541 阅读 · 0 评论 -
哈希表(java代码实现)
哈希表(散列表)java代码实现原创 2021-12-22 23:09:18 · 159 阅读 · 0 评论 -
插值查找(java代码实现)
# 插值查找(java代码实现)思路1. 与二分查找类似,不同的是求mid指针的公式不同 其mid=left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);2. 对于数据量较大,关键字分布比较均匀的查找表来书,该方法速度快3. 在关键字分布不均匀的情况下,该方法不一定比二分查找好代码```javapublic static int insertValueSearch(int[] arr, in原创 2021-12-18 21:06:25 · 361 阅读 · 0 评论 -
二分查找(java代码实现)
二分查找(java代码实现)思路1. 查询前的数组必须是有序的2. 需要三个指针 一个指向要查询数组的最左边left,初始化为开始数组的最左边数的下标(length-1) 一个指向要查询数组的最右边right,初始化为开始数组的最右边数的下标(0) 一个中间指针min,其主要目的和要找的数对比,其值由左指针和右指针求(left+right)/23. 若要找的值**大于**min,则**left指向min右边一个位置**,**向右递归该方法** 若要找的值**小于原创 2021-12-17 20:02:43 · 1657 阅读 · 1 评论 -
快速排序(java代码实现)
快速排序(java代码实现) 思路1. 设置两个指针, 一个左指针,初始化指向数组的第一个位置(最左边的数),向右一个个遍历 一个右指针,初始化指向数组的最后一个位置(最右边的数),向左一个个遍历2. 设置最左边的数为基准位,目的是用来做参照,3. 因为此处设置的基准数是最左边的数,所以需要**让右指针先出动**,向左一个个遍历(r--),找到**比基准位小**的数停下来4. 再让左指针出动,向右一个个遍历(l++),找到**比基准位大**的数停下来5. 现在比较两个指针指的数的原创 2021-12-16 21:47:43 · 1320 阅读 · 1 评论 -
基数排序(java代码实现)
基数排序(java代码实现)## 思路1. 需要0~10序号的10个桶,目的是按各个数位的数,依次放入相应序号的桶,取出时,按桶序号顺序取出所有数,放入原数组,一共经过原数组中**最大数的位数的次数**操作,排序结束;2. 定义10桶,需要一个二维数组 行数为10个桶, 为了防止在放入数的时候,数据溢出,则每个一维数组(桶),列数为arr.length 如下,原数组{ 53, 3, 542, 748, 14, 214}个位数的分类时原创 2021-12-16 21:13:33 · 636 阅读 · 0 评论 -
希尔排序交换法和移位法(java代码实现)
希尔排序交换法和移位法(java代码实现)原创 2021-12-15 19:58:21 · 1004 阅读 · 0 评论 -
插入排序(java代码实现)
插入排序(java代码实现)思路1. 一共遍历length-1趟数组2. 假设一个有序表,先将数组的第一个值放入有序表3. 将该趟遍历的数组的第一个数和有序表中的数,从有序表的最后一个数开始,依次比较,找到该数在有序表相应的位置,将其插入该位置 - 如果该数比有序表中的数都小,则其位置为有序表的第一个位置,有序表的最后一个数放入该数位置,前面的数依次往后推,结束条件为下标等于-1,最后将该数放入有序表的第一个位置 - 如果该数**不是最小**,当遇到比其小的数,循环结束,最后将原创 2021-12-14 21:38:13 · 780 阅读 · 0 评论 -
选择排序(Java代码实现)
选择排序(Java代码实现)原创 2021-12-14 21:36:40 · 540 阅读 · 0 评论 -
冒泡排序及优化
冒泡排序及优化 共遍历length-1趟数组 每趟遍历时从头两两依次比较,前面的数比后面的大,就交换,其目的是找到每趟中最大的数,将其放至最后 每遍历一趟,由于找到最大的数放置最后,所以不用比较最后的数,即每遍历一趟就少一次两两比较的机会 优化:当排序完毕后,但还在遍历数组比较,所以设置一个flag,当检测到一趟遍历后没有发生交换,直接挑出循环,即遍历结束。 外层循环为遍历数组的次数, 内层循环为当次遍历数组时,两两比较的次数 代码publ原创 2021-12-13 20:53:19 · 564 阅读 · 0 评论 -
逆波兰计算器(java代码实现)
逆波兰表达式java实现将输入的中缀表达式转化为后缀表达式利用一个栈将上述得到后缀表达式进行计算初始化一个栈和一个List:运算符栈s和存储中间结果的容器L ②从左到右扫描输入的中缀表达式 ③遇到操作数时,将其add到容器L ④遇到运算符时,如下三种情况分类:- 如果s为空;或栈顶运算符为左括号"(",则**直接将此运算符入栈**- 否则,若该优先级**高于**栈顶运算符的,则**直接将此运算符入栈**- 否则,若该优先级**小于或等于**栈原创 2021-12-11 17:30:55 · 339 阅读 · 0 评论 -
利用数组栈实现简单的四则运算
利用数组栈实现简单的四则运算原创 2021-12-08 22:14:58 · 409 阅读 · 0 评论 -
单向循环链表实现Josepfu(约瑟夫)问题
单向循环链表实现Josepfu(约瑟夫)问题原创 2021-12-07 23:20:10 · 119 阅读 · 0 评论 -
数组实现栈基础操作(入栈,出栈,遍历)
数组实现栈基础操作(入栈,出栈,遍历)原创 2021-12-07 22:23:57 · 723 阅读 · 0 评论 -
双向链表的实现(插入,删除,修改,遍历)
目录双向链表遍历思路代码双向链表无序添加双向链表顺序添加思路双向链表修改代码双向链表删除双向链表遍历与单链表思路一样public void list() { // 判断链表是否为空 if (head.next == null) { System.out.println("链表为空"); return; } // 因为头节原创 2021-12-06 23:12:09 · 992 阅读 · 0 评论 -
单链表面试题(求单链表中有效结点的个数,查找单链表中的倒数第k个结点,单链表反转,从尾到头打印单链表)
求单链表中有效结点的个数查找单链表中的倒数第k个结点单链表反转从尾到头打印单链表思路代码求单链表中有效结点的个数public static int getLength(HeroNode head) { if(head.next == null) { //空链表 return 0; } int length = 0; //定义一个辅助的变量, 这里我们没原创 2021-12-06 22:13:06 · 589 阅读 · 0 评论 -
单链表操作--插入,删除,修改,查询全部结点java实现
无顺序插入(直接添加到链表尾部)有顺序插入结点修改结点信息删除结点输出链表的全部结点信息java代码实现无顺序插入(直接添加到链表尾部)思路 先遍历链表,找到尾结点 将最后这个节点的next 指向 新的节点5 代码public void add(HeroNode heroNode) { //因为head节点不能动,因此我们需要一个辅助遍历 temp He原创 2021-12-05 10:48:21 · 423 阅读 · 0 评论 -
数组实现队列(代码实现)
数组实现一次性队列数组实现队列(代码实现)MaxSize为队列的最大容量(MaxSize==数组.length)数组实现循环队列front会随着数据输出而变化 (初始值为-1,因为将要输入的第一个数据的序号为0)rear会随着数组输入而变化(初始值为-1)队空:front==rear队满: rear==maxSize-1// 使用数组模拟队列-编写一个ArrayQueue类原创 2021-12-04 19:48:48 · 162 阅读 · 0 评论 -
二维数组与稀疏矩阵的相互转换
二维数组与稀疏矩阵的相互转换,代码实现原创 2021-12-03 12:02:47 · 480 阅读 · 0 评论 -
数据结构与算法笔记(极客时间)--队列
队列队列的概念顺序队列和链式队列基于链表的队列实现方法循环队列阻塞队列和并发队列线程池没有空闲线程时,新的任务请求线程资源时,线程池该如何处理?各种处理策略又是如何实现的呢?本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏 。队列队列的概念队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。(先进先出)顺序队列和链式队列跟栈一样,用数组实现的队列叫作顺序队列,用链表实现的队原创 2021-11-25 20:16:36 · 1013 阅读 · 0 评论 -
数据结构与算法笔记(极客时间)--栈
栈的概念、栈的实现、支持动态扩容的顺序栈、栈在函数调用中的应用、栈在表达式求值中的应用、栈在括号匹配中的应用、栈在浏览器中的应用、为什么函数调用要用“栈”来保存临时变量呢?用其他数据结构不行吗?原创 2021-11-24 16:55:08 · 496 阅读 · 0 评论 -
数据结构与算法笔记(极客时间)--链表
本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏 。链表概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。指针:存储所指对象的内存地址。将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。常见的链表分类单链表链表通过指针将一组零散的内存块串联在一起。其中链表的结点指的就是是内存块。链表要将所有的结点串起原创 2021-11-15 21:20:30 · 324 阅读 · 0 评论