Java数据结构
文章平均质量分 87
本专栏为笔者学习中的笔记与总结,包括:稀疏数组、队列、单向链表、环形链表、双向链表、前缀、中缀、后缀表达式、散列表、哈希表、二叉树、二叉排序树等
兴趣使然黄小黄
大家好,我是黄小黄!软件工程在读,CSDN全栈领域新星创作者,阿里云特邀专家博主,专注Java后端及算法领域,也会分享一些前端相关内容。期待与您一起学习交流,共同进步!
展开
-
Java数据结构:堆与PriorityQueue优先级队列的使用
堆实质上就是对完全二叉树进行了一些调整。而在 Java 的 PriorityQueue 优先级队列中,底层就是堆这样的结构。所以,我们尝试通过模拟堆的实现,来更好的理解优先级队列。知识补充:何为完全二叉树?答:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。原创 2023-01-12 19:22:16 · 673 阅读 · 10 评论 -
图解数据结构:盘点链表与栈和队列的那些血缘(单双链表模拟实现栈和队列)
很久不见,重新回顾一下,之前所讲到的数据结构(栈、队列、单双链表),并尝试使用一种新的存储形式来组织数据(链式存储栈和队列)。本文阐述了如何分别采用单双链表实现栈与队列。原创 2023-01-05 21:08:35 · 739 阅读 · 18 评论 -
排序算法图解(六):归并排序
归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。以序列8、4、5、7、1、3、6、2为例分而治之。原创 2022-11-22 23:05:23 · 660 阅读 · 7 评论 -
排序算法图解(五):快速排序分步刨析
快速排序是对冒泡排序的一种改进。基本思想为:通过一趟排序将要排序的数据分割为独立的两个部分,其中一部分的所有数据比另外一部分的所有数据要小,然后按照此方法对这两部分分别进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列。原创 2022-11-09 07:21:18 · 940 阅读 · 6 评论 -
排序算法图解(四):希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序,即将简单的插入排序进行改进后的一个更加高效的版本,也称缩小增量排序。希尔排序是非稳定排序算法。把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。原创 2022-11-05 13:09:08 · 4247 阅读 · 4 评论 -
排序算法图解(三):插入排序
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。原创 2022-11-05 10:57:14 · 393 阅读 · 4 评论 -
排序算法图解(二):选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。本文被Java数据结构专栏收录, 持续更新中。原创 2022-11-04 10:24:10 · 1285 阅读 · 8 评论 -
排序算法图解(一):冒泡排序与冒泡排序的优化
冒泡排序(Bubble Sorting)即:通过对待排序的序列从前往后,依次比较相邻元素的值,若发现逆序则交换位置,使较大的元素逐渐移动到后部,就像水底的气泡一样逐渐从水面冒出来,这就是冒泡名称的由来。原创 2022-11-03 15:38:28 · 741 阅读 · 6 评论 -
Java数据结构:前缀、中缀、后缀表达式与逆波兰计算器的实现
本文对前缀、中缀、后缀表达式进行了讲解,实现了中缀表达式转后缀表达式,并利用栈实现了逆波兰表达式计算器求值。原创 2022-10-29 11:19:13 · 2411 阅读 · 14 评论 -
Java数据结构:栈与综合计算器的实现(图解+完整代码)
栈(stack)是具有先进后出特性的有序列表。即限制线性表中的元素的插入和删除只能在同一端。栈顶:允许插入和删除的一端栈底:固定的一端因此,最先放入栈的元素在栈底,最后放入的元素在栈顶。当删除(出栈)的时候,正好相反,栈顶元素先删除,即最后放入的元素。Top初始指向最底端,在数组模拟时,初始一般为-1。进行入栈操作时,每进一个元素,Top都会自增,指向栈顶元素。出栈则是入栈的逆过程。简单计算器的实现旨模拟计算机计算表达式。原创 2022-10-26 23:46:20 · 1060 阅读 · 21 评论 -
Java数据结构:双向链表的实现
本文对比了单链表和双向链表,并对双向链表的具体实现进行了讲解。文中附双向链表实现的完整代码及测试类,供码友们参考学习!原创 2022-10-25 08:59:30 · 967 阅读 · 10 评论 -
Java数据结构:单链表的实现与面试题汇总(带头节点与不带头节点的两种方式的链表实现)
本文介绍了单链表,并使用Java语言实现了单链表的基本功能。最后,列举了新浪、腾讯和百度的有关单链表的面试题,例如:单链表的反转、逆序打印、倒数k个元素等。原创 2022-10-24 10:11:44 · 803 阅读 · 33 评论 -
Java数据结构:使用数组模拟队列(队列与环形队列)
本文介绍了队列这一数据结构,并通过数组的方式分别实现了队列与环形队列。环形队列解决了队列无法复用的问题。文中附有实现的完整代码,供读者学习使用。原创 2022-10-21 09:09:02 · 597 阅读 · 15 评论 -
Java数据结构:稀疏数组的实现与应用
由扫雷案例引入稀疏数组优化存储空间,介绍了稀疏数组的使用场景及实现思路,并通过案例实现了二维数组转稀疏数组与稀疏数组恢复二维数组的需求。原创 2022-10-20 14:29:34 · 763 阅读 · 14 评论