数据结构与算法
文章平均质量分 90
数据结构与算法
一口好锅
草率计划,立即行动!
展开
-
【排序算法系列 7】堆排序
【排序算法系列 1】冒泡排序【排序算法系列 2】选择排序【排序算法系列 3】 插入排序【排序算法系列 4】 高级排序——希尔排序(插入排序的改进)【排序算法系列 5】 高级排序——归并排序【排序算法系列 6】 高级排序——归并排序(由冒泡排序改进)堆排序简介:堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。需求:给定一个数组:String[] arr原创 2020-12-05 23:09:18 · 321 阅读 · 0 评论 -
【数据结构 9】优先队列及其Java实现
【数据结构 1】顺序表及其Java实现【数据结构 2】单向链表及其Java实现【数据结构 3】双向链表及其Java实现【数据结构 4】栈及其Java实现【数据结构 5】队列及其Java实现【数据结构 6】符号表及其Java实现(使用链表实现)【数据结构 7】二叉查找树及其Java实现【未完待续…】不定期更新,内容总结整理不易,欢迎点赞关注博主!感谢!优先队列一、什么是优先队列二、最大优先队列2.1 最大优先队列API设计2.2 最大优先队列代码实现三、最小优先队列3.1 最小优先队列A原创 2020-12-05 22:04:44 · 1034 阅读 · 0 评论 -
【数据结构 8】并查集及其Java实现
【数据结构 1】顺序表及其Java实现【数据结构 2】单向链表及其Java实现【数据结构 3】双向链表及其Java实现【数据结构 4】栈及其Java实现【数据结构 5】队列及其Java实现【数据结构 6】符号表及其Java实现(使用链表实现)【数据结构 7】二叉查找树及其Java实现【未完待续…】不定期更新,内容总结整理不易,欢迎点赞关注博主!感谢!并查集一、什么是并查集1.1 并查集1.2 并查集的结构二、并查集设计2.1 并查集API设计2.2 并查集的实现2.2.1 UF(int原创 2020-12-05 21:18:27 · 578 阅读 · 0 评论 -
【每周更新】Java数据结构与算法
数据结构【数据结构 1】顺序表及其Java实现【数据结构 2】单向链表及其Java实现【数据结构 3】双向链表及其Java实现【数据结构 4】栈及其Java实现【数据结构 5】队列及其Java实现【数据结构 6】符号表及其Java实现(使用链表实现)【数据结构 7】二叉查找树及其Java实现【数据结构 8】并查集及其Java实现(待更新)【数据结构 9】优先队列及其Java实现(待更新)【数据结构 10】无向图及其Java实现(深度or广度优先搜索、路径查找)【数据结构 11】有向图及原创 2020-11-09 00:22:08 · 288 阅读 · 0 评论 -
【数据结构 7】二叉查找树及其Java实现
【数据结构 1】顺序表及其Java实现【数据结构 2】单向链表及其Java实现【数据结构 3】双向链表及其Java实现【数据结构 4】栈及其Java实现【数据结构 5】队列及其Java实现【数据结构 6】符号表及其Java实现(使用链表实现)【未完待续…】不定期更新,内容总结整理不易,欢迎点赞关注博主!感谢!二叉查找树一、什么是树?1.1 树的基本定义1.2 树的相关术语二、二叉树的基本定义2.1 二叉树2.2 满二叉树和完全二叉树三、二叉查找树的创建3.1 二叉树的结点类设计及其代码实原创 2020-11-01 21:05:41 · 302 阅读 · 2 评论 -
【数据结构 6】符号表及其Java实现(使用链表实现)
【数据结构 1】顺序表及其Java实现【数据结构 2】单向链表及其Java实现【数据结构 3】双向链表及其Java实现【数据结构 4】栈及其Java实现【数据结构 5】队列及其Java实现【未完待续…】不定期更新,内容总结整理不易,欢迎点赞关注博主!感谢!符号表一、什么是符号表?二、符号表API设计2.1 结点类API设计2.2 符号表API设计三、符号表的代码实现一、什么是符号表?符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键原创 2020-11-01 18:50:57 · 1303 阅读 · 0 评论 -
【数据结构 5】队列及其Java实现
一、队列1.1 简介队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。1.2 队列的API设计类名Queue构造方法Queue():创建Queue对象成员方法1public boolean isEmpty():判断队列是否为空,是返回true,否返回false成员方法2public int size():获取队列中元素的个数成原创 2020-10-30 22:52:11 · 308 阅读 · 0 评论 -
【数据结构 4】栈及其Java实现
一、栈1.1 简介栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。栈按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。数据进入到栈的动作为压栈数据从栈中出去的动作为弹栈1.2 栈API设计类名Stack构造方法Stack():创建Stack对象成员方法1public boolean isEmpty():判断栈是否为空,是返回tru原创 2020-10-30 22:41:57 · 312 阅读 · 1 评论 -
【数据结构 3】双向链表及其Java实现
一、双向链表1.1 简介双向链表也叫双向表,是链表的一种,它由多个结点组成,每个结点都由一个数据域和两个指针域组成,数据域用来存储数据,其中一个指针域用来指向其后继结点,另一个指针域用来指向前驱结点。链表的头结点的数据域不存储数据,指向前驱结点的指针域值为null,指向后继结点的指针域指向第一个真正存储数据的结点。1.2 结点API设计类名Node构造方法Node(T t,Node pre,Node next):创建Node对象成员变量 1T item:存储数据原创 2020-10-30 22:23:29 · 388 阅读 · 1 评论 -
【数据结构 2】单向链表及其Java实现
一、链表1.1 顺序表的缺点虽然顺序表的查询很快,时间复杂度为O(1),但是增删的效率是比较低的,因为每一次增删操作都伴随着大量的数据元素移动。可以使用链式存储结构实现线性表,来克服顺序表增删效率低的问题。1.2 什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。二、单向链表Java实现2.1 链表的结点类设计2.1.1 节点API原创 2020-10-30 22:04:22 · 466 阅读 · 2 评论 -
【数据结构 1】顺序表及其Java实现
顺序表一、什么是数据结构?二、线性数据结构三、顺序表及其Java实现3.1 什么是顺序表?3.2 顺序表的实现(固定容量版)3.2.1 API设计3.2.2 代码3.3 顺序表的实现(容量可变版)3.3.1 容量伸缩方案3.3.2 代码3.4 顺序表的时间复杂度3.5 补充一、什么是数据结构?数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。如下图所示,常见的原创 2020-10-30 18:11:57 · 540 阅读 · 2 评论 -
【排序算法系列 6】 高级排序——归并排序(由冒泡排序改进)
简介快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。需求排序前:{6, 1, 2, 7, 9, 3, 4, 5, 8}排序后:{1, 2, 3, 4, 5, 6, 7, 8, 9}快速排序原理首先设定一个分界值,通过该分界值将数组分成左右两部分;将大于或等于分界值的数据放到到数组右边,小原创 2020-10-20 23:45:15 · 355 阅读 · 0 评论 -
【排序算法系列 5】 高级排序——归并排序
简介归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。需求排序前:{8,4,5,7,1,3,6,2}排序后:{1,2,3,4,5,5,6,7,8}归并排序原理尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。将相邻的两个子组进行合并成一个有序的大组;不断的重复步原创 2020-10-20 23:35:45 · 319 阅读 · 2 评论 -
【排序算法系列 4】 高级排序——希尔排序(插入排序的改进)
简介希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。需求排序前:{9,1,2,5,7,4,8,6,3,5}排序后:{1,2,3,4,5,5,6,7,8,9}希尔排序原理选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组;对分好组的每一组数据完成插入排序;减小增长量,最小减为1,重复第二步操作。增长量h的确定增长量h的值每一固定的规则,我们这里采用以下规则:N是数组的长度 int h=1 while(h<N/原创 2020-10-20 22:55:09 · 298 阅读 · 0 评论 -
【排序算法系列 3】 插入排序
简介插入排序(Insertion sort)是一种简单直观且稳定的排序算法。插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如下图所示:需求排序前:{4,3,2,10,12,1,5,6}排序后:{1,2,3,4,5,6,10,12}插入排序原理把所有的元素分为两组,已经排序的和未排序的;找到未排序的组中的第一原创 2020-10-20 22:41:18 · 452 阅读 · 0 评论 -
【排序算法系列 2】选择排序
简介选择排序是一种更加简单直观的排序方法。需求排序前:{4,6,8,7,9,2,10,1}排序后:{1,2,4,5,7,8,9,10}选择排序原理每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引。交换第一个索引处和最小值所在的索引处的值。选择排序API设计类名Selection构造方法Selection():创建Sele原创 2020-10-20 22:33:05 · 301 阅读 · 0 评论 -
【排序算法系列 1】冒泡排序(Bubble Sort)
简介冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。需求排序前:{9,6,5,4,0,2,1}排序后:{0, 1, 2, 4, 5, 6, 9}排序原理比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。冒泡排序API设计类名Bubble构造方法Bubble():创建Bubble对象成员方法 11.publi原创 2020-10-20 22:25:18 · 476 阅读 · 0 评论