
java数据结构
用Java语言实现的数据结构
rookie g
早睡早起
展开
-
Java 实用语法小总结
学习了一学期的Java,慢慢的从开始的浑浑噩噩到现在觉得Java的博大精深和有趣,所谓温故而知新,期末伏羲重新看一遍书还是有很大收获的。比如:遍历m>n ? m:n原创 2022-05-03 11:14:35 · 466 阅读 · 0 评论 -
顺序查找与折半查找
1.顺序查找使用岗哨可以节约一半的时间. 为此, 第 0 个位置不可以放有意义的数据, 即有效数据只有 length - 1 个.2.顺序查找时间复杂度为 O ( n ) O(n)O(n).3.折半查找时间复杂度为 O ( log n ) O(\log n)O(logn).4.书上为简化起见, 只关注键. 这里使用键值对来表示一条完整的数据. 实际应用中可以把 content 改成任何想要的数据类型.5.102 行是一个空语句. 这里提供了一种更简洁的写法, 可以把 101-103 并作一行 (原创 2022-03-15 20:36:08 · 1043 阅读 · 0 评论 -
查找与排序 归并排序
简述归并排序(1)算法思想 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解。 归并排序将待排序数组A[1..n]分成两个各含n/2个元素的子序列,然后对这个两个子序列进行递归排序,最后将这两个已排序的子序列进行合并,即得到最终排好序的序列。具体排序过程如下图所示:操作代码/** ********************* * Merge sor.原创 2022-03-18 20:23:50 · 224 阅读 · 0 评论 -
查找与排序 选择排序
简述选择排序选择排序的基本思想是:每一趟(例如第i趟)在后面的 n-i+1 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第 n-1 趟做完,待排序元素只剩下一个,就不用再选了。这里主要讲简单选择排序和堆排序(重点,面试中问到过)一、简单选择排序基本思想:假设排序表为 L[1…n] ,第i趟排序即从L[i,n] 中选择关键字最小的元素与 L(i) 交换,每一趟排序可以确定一个元素的最终位置,这样经过 n-1 趟排序就可以使整个排序表有序。空间效率为O(1)元素移动次数很少,原创 2022-03-18 19:58:03 · 143 阅读 · 0 评论 -
查找与排序 插入排序
简述插入排序原理很简单,将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。特点1.代码非常短,因为是简单直接的排序方式2.每次要保证前i个数据是有顺序的3.先做简单的事情(第一轮最多有一次移动),在做麻烦的事情(最后一轮有n-1次移动)4.下标0的数据为岗哨,与前面的顺序查找和折半查找原创 2022-03-18 18:58:09 · 794 阅读 · 0 评论 -
查找与排序 冒泡排序
简述冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置…第n-1(n为无序数据的个数)趟即能完成排序以下面5个无序的数据为例:40 8 15 18 12第1趟: 8 15 18 12 40第2趟: 8 15 12 18 40第3趟: 8 12 15 18 40第4趟: 8 12 15 18 40运行代码原创 2022-03-18 19:24:54 · 2540 阅读 · 0 评论 -
插找与排序 快速排序
简述快速排序快速排序是对冒泡排序的一种改进, 它是不稳定的。由C. A. R. Hoare在1962年提出的一种划分交换排序,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数,它的最好情况为O(nlogn),最坏情况为O(n^2),平均时间复杂度为O(nlogn)。基本思想:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到全部数据变成有序。原创 2022-03-18 19:51:07 · 175 阅读 · 0 评论 -
查找与排序 希尔排序
简述基本思想:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰好被分为一组,算法便终止。我们用几张图片来理解这就是全过程实战代码/** ********************* * Shell sort. We do not use sentries here because too many of them are need. ********************* */原创 2022-03-18 19:08:30 · 374 阅读 · 0 评论 -
查找与排序 堆排序
简述堆排序1、首先了解堆是什么堆是一种数据结构,一种叫做完全二叉树的数据结构。2、堆的性质这里我们用到两种堆,其实也算是一种。大顶堆:每个节点的值都大于或者等于它的左右子节点的值。小顶堆:每个节点的值都小于或者等于它的左右子节点的值。对于大顶堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2]对于小顶堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i +原创 2022-03-18 20:06:01 · 1137 阅读 · 0 评论 -
查找与排序 哈希表
哈希表的基本概念哈希表(Hash table,也叫散列表):是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。哈希表的本质上上一个数组(元素是Entry)Hash Table的查询原创 2022-03-18 18:43:07 · 1015 阅读 · 0 评论 -
查找与排序 所有源码
package dataStructure.search;/** * Data array for searching and sorting algorithms.用于搜索和排序算法的数据数组 * * @author goudiyuan */public class DataArray { /** * An inner class for data nodes. The text book usually use an int value to * represent the d原创 2022-03-18 20:25:38 · 210 阅读 · 0 评论 -
图论——关键路径
1.拓扑排序是关键路径的一部分.2.关键路径长度, 其实是最远路径长度. 然而, 它并非最短路径的对偶问题. 我尝试修改 Dijkstra 算法来解决, 然后发现自己傻了.3.正向算每个节点的最早开始时间, 逆向算每个节点的最晚开始时间, 设计太牛了.4.最晚开始时间的初始化容易弄错, 经典算法果然是不好对付的. /** ********************* * Critical path. Net validity checks such as loop check not .原创 2022-03-15 20:23:47 · 228 阅读 · 0 评论 -
Dijkstra算法与Prim算法
1.又需要画个几个图, 换几个例子.2.Dijkstra 算法需要有向图, Prim 算法需要无向图. 代码中也需要更换后者.3/两个算法的结构相同. 不同之处是比较距离的时候, 是用累计的 (Dijkstra) 还是当前边的 (Prim). 建议先写 Dijkstra, 然后拷贝、修改变成 Prim. 到这个阶段, 应该已经具备这样的能力.package dataStructure.graph;import java.util.Arrays;import matrix.IntMatrix原创 2022-03-15 20:19:54 · 318 阅读 · 0 评论 -
十字链表
package dataStructure.graph; /** * Orthogonal List for directed graph. * @author goudiyuan */public class OrthogonalList { /** * An inner class for adjacent node. */ class OrthogonalNode { /** * The row index. */ int row; /** .原创 2022-03-15 20:11:20 · 95 阅读 · 0 评论 -
Java第37天——邻链表
相当于图的压缩存储. 每一行数据用一个单链表存储. 重写了广度优先遍历. 可以发现, 使用队列的机制不变. 仅仅是把其中的 for 循环换成了 while, 避免检查不存在的边. 如果图很稀疏的话, 可以降低时间复杂度. 深度优先遍历可以当作作业, 这里不写了.package dataStructure.graph;import dataStructure.queue.CircleObjectQueue;public class AdjacencyList { /** * An.原创 2022-01-15 22:25:19 · 106 阅读 · 0 评论 -
Java第36天——图的m着色问题
经典的回溯算法. 万能的暴力解题法, 一定要掌握啊! 调拭时注意 +1, -1 之类的下标控制. 单独写一个冲突检测方法. 由于它仅使用了图的连接性, 所以放在这个部分. /** ********************* * Coloring. Output all possible schemes. * * @param paraNumColors The number of colors. ********************* */ public vo.原创 2022-01-14 19:11:00 · 288 阅读 · 0 评论 -
Java第35天——图的深度优先遍历
图的深度优先遍历原创 2022-01-14 19:06:13 · 193 阅读 · 0 评论 -
Java第34天——图的广度优先遍历
与树的广度优先遍历类似. 温故而知新. 应该看懂了自己写一遍. 为每个核心方法写一个测试方法吧. 这叫单元测试 /** ********************* * Breadth first traversal. * * @param paraStartIndex The start index. * @return The sequence of the visit. ********************* */ public String breadthFi原创 2022-01-11 20:53:49 · 102 阅读 · 0 评论 -
Java第33天——图的连通性检测
图的连通性检测原创 2022-01-10 20:38:33 · 252 阅读 · 0 评论 -
Java第32天——整数矩阵及其运算
有了前面的基础,现在理解这个还是轻松,不像前面的Huffman树。1,矩阵对象的创建.2,getRows 等: getter, setter 在 java 里面很常用. 主要是为了访问控制.3,整数矩阵的加法、乘法.4,Exception 的抛出与捕获机制.5,用 this 调用其它的构造方法以减少冗余代码.6,代码看起来多, 但矩阵运算我们以前写过(其实去掉注释也就只有100多行).7,把数据类型修改成 double, 获得 DoubleMatrix.java, 以后会很有用.8,get原创 2022-01-09 21:10:21 · 327 阅读 · 2 评论 -
Java第30天——Java Character类
由于我的Huffman树又出bug了,所以先水一下,写一下其他我前面遇到过的东西,但是我不知道的。原创 2022-01-07 20:05:27 · 204 阅读 · 0 评论 -
Java第31天——Huffman编码(建树,编码和解码)
这个着实有点恼火原创 2022-01-08 21:16:20 · 359 阅读 · 0 评论 -
Java第29天——Huffman编码(节点定义与文件读取)
这里看的眼睛都花了,因为我是觉得第一天的还好,后面就多看了一点,没有想到啊,害原创 2022-01-06 17:07:44 · 260 阅读 · 0 评论 -
Java第28天——hanoi塔问题
Java实现简单hanoi塔问题原创 2022-01-05 17:14:43 · 120 阅读 · 0 评论 -
Java第26天——问题整理
其实有很多问题,只是我还没有发现原创 2022-01-05 16:57:56 · 350 阅读 · 0 评论 -
Java第27天——二叉树的深度遍历的栈实现(前序和后序)
我找到为什么了原创 2022-01-04 22:29:43 · 524 阅读 · 0 评论 -
Java第25天——二叉树深度遍历的栈实现(中序)
还是深度遍历,想要看泛型可以看21天原创 2022-01-02 21:01:27 · 550 阅读 · 0 评论 -
Java第24天——二叉树的建立
这一篇也很顶原创 2022-01-01 21:37:15 · 1199 阅读 · 1 评论 -
Java第23天——使用具有通用性的队列
总算是把逻辑搞清楚了原创 2021-12-31 22:22:17 · 339 阅读 · 1 评论 -
Java第22天——二叉树的存储
着的是越来越难了,希望我能够坚持下去,Hurry原创 2021-12-30 21:56:29 · 716 阅读 · 0 评论 -
Java第21天——二分搜索树深度优先遍历
二分搜索树深度优先遍历,这篇文章是我参考的菜鸟教程里面的。使用泛型的格式我还是不怎么看得懂原创 2021-12-30 20:55:03 · 476 阅读 · 1 评论 -
Java第20天——二叉树的深度遍历的递归实现
二叉树的深度优先遍历递归实现原创 2021-12-28 18:47:04 · 210 阅读 · 0 评论 -
Java第十八天——小结
对这几天的线性数据结构做一些总结。原创 2021-12-25 23:36:46 · 108 阅读 · 0 评论 -
Java第15天——链队列
java单链表原创 2021-12-22 17:35:09 · 466 阅读 · 0 评论 -
周报第二周
这是第二周的周报原创 2021-12-15 17:06:53 · 879 阅读 · 0 评论 -
周报第一周
会根据天数更新,每天都会有新的内容,七天过后就会更新下一期原创 2021-12-09 22:30:12 · 438 阅读 · 0 评论