
数据结构
数据结构
碳烤小肥羊。。。
all in
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java实现二叉树的三种遍历方式
二叉树遍历原创 2022-08-01 21:50:32 · 336 阅读 · 0 评论 -
Java实现二叉树的递归遍历(前序遍历、中序遍历、后序遍历)
实现二叉树的递归遍历原创 2022-07-19 16:48:27 · 1656 阅读 · 0 评论 -
用队列实现栈(Java语言实现)
用队列实现栈原创 2022-07-05 16:55:48 · 421 阅读 · 0 评论 -
用栈实现队列(Java语言实现)
用栈实现队列原创 2022-07-05 10:20:32 · 221 阅读 · 0 评论 -
详解最短路径
最短路径定义及性质定义:在一副加权有向图中,从顶点s到顶点t的最短路径 是 所有从顶点s到顶点t的路径中总权重最小的那条路径。性质:1:路径具有方向性;2:权重不一定等价于距离。权重可以是距离,时间,花费等内容,权重最小指的是成本最低。3:只考虑连通图。一副图中并不是所有的顶点都是可达的,如果s和t不可达,那么它们之间也就不存在最短路径,为了简化问题,这里只考虑连通图。4:最短路径不......原创 2020-04-20 11:06:08 · 3888 阅读 · 0 评论 -
加权有向图的实现(详解)
加权有向图的实现如果有问题可以参考加权有向图的介绍:加权有向图介绍API设计import cn.itcast.demo.day02.linear.Queue;public class EdgeWeightedDigraph { //顶点数目 private final int V; //边的数目 private int E; //邻接表 ......原创 2020-04-20 10:35:11 · 2120 阅读 · 0 评论 -
加权有向图介绍(内含代码详解)
加权有向图API设计代码实现:public class DirectedEdge { private final int v;//起点 private final int w;//终点 private final double weight;//当前边的权重 public DirectedEdge(int v,int w,double weight){...原创 2020-04-20 10:11:26 · 1358 阅读 · 0 评论 -
解析加权无向图(内含代码详解)
加权无向图加权无向图是一种为每条边关联一个权重值或是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权值则可以表示距离或者费用。在一副电路图中,边表示导线,权值则可能表示导线的长度即成本,或是信号通过这条边需要的时间。此时我们很容易就能想到,最小成本的问题,例如,从西安飞纽约,怎样飞才能使时间成本最低或者是金钱成本最低?在下图中,从顶点0到顶点4有3条路径,分别是......原创 2020-04-11 13:24:23 · 3769 阅读 · 0 评论 -
拓扑排序的逐步分析(内含代码详解)
拓扑排序对拓扑排序的介绍,我分成了三部分1:判断有向图中是否有环;2:基于深度优先的顶点排序;3:拓扑排序的实现。想要弄懂拓扑排序,需要你提前了解如何判断图中是否有环一节基于深度优先的顶点排序。下面为其介绍:判断图中是否有环:判断图中是否有环基于深度优先的顶点排序:基于深度优先的顶点排序拓扑排序的API设计:代码实现:package cn.itcast.demo.day02...原创 2020-04-10 20:22:04 · 256 阅读 · 0 评论 -
基于深度优先的顶点排序(内含代码详解)
基于深度优先的顶点排序如果要把图中的顶点生成线性序列其实是一件非常简单的事,之前我们学习并使用了多次深度优先搜索,我们会发现其实深度优先搜索有一个特点,那就是在一个连通子图上,每个顶点只会被搜索一次,如果我们能在深度优先搜索的基础上,添加一行代码,只需要将搜索的顶点放入到线性序列的数据结构中,我们就能完成这件事。顶点排序的API设计顶点排序实现(图解)在API设计中,我们添加一个栈rev......原创 2020-04-10 19:38:00 · 2839 阅读 · 0 评论 -
判断有向图中是否有环(内含代码详解)
如果学习x课程前必须先学习y课程,学习y课程前必须先学习z课程,学习z课程前必须先学习x课程,那么一定是有问题了,我们就没有办法学习了,因为这三个条件没有办法同时满足。其中这三门课程x,y,z的条件组成了一个环。因此,如果我们要使用拓扑排序解决优先级问题,首先得保证图中没有环的存在。1.1检测有向环的API设计在API中添加onStack[]布尔数组,索引为图的顶点,当我们深度搜索的时:...原创 2020-04-10 18:46:50 · 3925 阅读 · 4 评论 -
什么是拓扑排序(详解)
在现实生活中,我们经常会同一时间接到许多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java学科为例,我们要学习很多知识,但是这些知识在学习的过程中是需要按照先后次序来完成的。从java基础,到jsp/servelt,到ssm,到springboot等是个循环渐进且有依赖的过程。在学习jsp前首先要掌握java基础和html基础,学习ssm框架前要掌握jsp/servelt之类才行。......原创 2020-04-09 20:50:04 · 3041 阅读 · 0 评论 -
有向图的代码实现(详解)
有向图的API设计在API设计了一个反向图,其因为有向图的实现中,用adj方法获取出来的是由当前顶点v指向的其他顶点,如果能够得到其反向图,就可以很容易得到指向v的其他顶点。有向图的代码实现:package cn.itcast.demo.day02.algorithm;import cn.itcast.demo.day02.linear.Queue;public class Dig...原创 2020-04-09 20:30:45 · 2107 阅读 · 0 评论 -
带你玩转有向图------有向图(详解)
1.1有向图的定义及相关术语定义:有向图是一副具有方向性的图,是有一组顶点和一组有方向的边组成的,每条方向的边都连接着一对有序的顶点。出度:有某个顶点指出的边的个数称为该顶点的出度,例如A 的出度为2。入度:指向某个顶点的边的个数称为该顶点的入度,例如A的入度为1。有向路径:有一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。有向环:一条至少含有一条边,且......原创 2020-04-09 19:53:30 · 11905 阅读 · 0 评论 -
优先队列(详解--最大优先队列,最小优先队列)
优先队列普通的队列是一种先进先出的数据结构,元素在队列尾部追加,从而队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下,计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这......原创 2020-03-19 10:53:27 · 8117 阅读 · 0 评论 -
什么是堆排序,堆排序(代码详解)
下面为推排序的一些代码,仅供参考:public class HeapSort<T extends Comparable<T>>{ //判断heap堆中索引i处的元素是否小于索引j处的元素 private static boolean less(Comparable[] heap,int i,int j){ return heap[i].co...原创 2020-03-17 21:45:05 · 280 阅读 · 0 评论 -
零基础带你玩转折纸问题(分析+代码详解)
转折纸问题需求:请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折1次,压出折痕后再展 开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕,下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印出所有折痕的方向。例如:N = 1时: down; N = 2时,打...原创 2020-03-10 21:54:46 · 969 阅读 · 0 评论 -
二叉树的最大深度问题方法求解。
二叉树的最大深度问题求解方法:需求:给定一棵树,请计算出树的最大深度(树的根节点到最远叶子节点的最长路径上的结点数);实现步骤:如果根结点为空,则最大深度为0;计算左子树的最大深度;计算右子树的最大深度;当前树的最大深度 = 左子树的最大深度和右子树的最大深度中的较大者+1;代码实现入下: //获取整个树的最大深度 public int maxDepth(){ ...原创 2020-03-09 20:24:21 · 461 阅读 · 0 评论 -
什么是二叉树的层序遍历(详解+代码实现)
二叉树的层序遍历:所有的层序遍历,就是从根节点(第一层开始),依次向下,获取每一层所有结点的值,有二叉树入下:API设计:public Queue layerErgodic():使用层序遍历,获取整个树中的所有键;实现步骤:1.创建队列,存储每一层的结点;2.使用循环从队列中弹出一个结点:2.1:获取当前结点的key;2.2:如果当前结点的左子结点不为空,则把左子结点放入到队列中......原创 2020-03-09 19:57:26 · 3581 阅读 · 0 评论 -
数据结构之队列:一看就懂,你还等什么
数据结构之队列:本文章涉及队列的一些代码设计:1:public boolean isEmpty():判断队列是否为空2:public int size():返回队列中元素的个数3:public void enQueue(T t):向队列中插入元素t4:public T dequeue():从队列中拿出一个元素实现代码入下:public class Queue<T>{ ...原创 2020-03-09 19:56:30 · 232 阅读 · 0 评论 -
二叉树的基础遍历---前序遍历,中序遍历以及后序遍历
二叉树的基础遍历1:前序遍历:先访问根结点,然后再访问左子树,最后访问右子树;2:中序遍历:先访问左子树,然后再访问根结点,最后访问右子树;3:后序遍历:先访问左子树,然后再访问右子树,最后访问根结点;...原创 2020-03-09 19:02:41 · 265 阅读 · 0 评论 -
如何实现二叉查找树的创建(分析+代码详解)
二叉查找树的创建1:二叉树的结点类:代码实现如下:private class Node{ //存储键 private Key key; //存储值 public Value vlaue; //记录左子结点 public Node left; //记录右子结点 pub...原创 2020-03-05 21:15:11 · 843 阅读 · 0 评论 -
树与二叉树快速入门知识点大全(详解)
二叉树基本知识点今天自己总结了一些树与二叉树一些基本知识点,关注我后续会有代码实现。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下特点:每个结点有零个或多个子节点;没有父节点的结点为根节点;每一个非根结点只有一个父结点;每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的...原创 2020-03-04 20:50:33 · 538 阅读 · 0 评论 -
数据结构之符号表
-符号表符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。**例如:符号表中键具有唯一性** 符号表API设计1.结点类:类名:Node<Key,Value>;构造方法:Node<Key key,Value value,Node next>:创建Node对象;成员变量......原创 2020-03-03 21:16:57 · 2444 阅读 · 0 评论 -
利用栈实现逆波兰表达式(后缀表达式)问题求解
逆波兰表达式(后缀表达式)问题波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasewicz)于1929年首先提出的一种表达式的表示方法 [1] 。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。解决思路:定义一个栈,用来存储操作数;从左到右遍历逆波兰表达式,得到每一个元素;判断当前元素是运算...原创 2020-03-02 21:01:48 · 593 阅读 · 0 评论 -
用栈解决括号匹配问题。
用栈解决括号匹配问题。“(XX)(YY)”:正确匹配;“(XX(YY)”:错误匹配;“()(XX)((YY))”:正确匹配;解决思路:创建一个栈用来存储左括号;从左往右遍历字符串,拿到每一个字符;判断该字符是不是左括号,如果是,放入栈中存储;判断该字符是不是右括号,如果不是继续下一次循环;如果该符号是右符号,则从栈中弹出一个元素t;判断元素t是否为Null,如果不是,则证明有...原创 2020-03-02 13:09:35 · 819 阅读 · 0 评论 -
约瑟夫问题(分析+代码详解)
据说著名犹太历史学家Josephus有过以下的故事在罗马人占领乔塔帕特后,41个人坐一圈,第一个人编号为1,第二个人编号为2,第n个人的编号为n。原创 2020-03-01 20:36:59 · 2494 阅读 · 0 评论 -
利用快慢指针解决中间值问题,单向链表是否有环问题以及有环链表入口问题。
利用快慢指针解决中间值问题,单向链表是否有环问题以及有环链表入口问题1. 中间值问题;2. 单向链表是否有环问题;3. 有环链表入口问题;快慢指针: 快慢指针指的是定义两个指针,这两个指针的移动速度一快一慢,以此来制造出自己想要的差值,这个差值可以让我们找到链表是哪个相应的结点,已满情况下,快指针的移动步长为慢指针的两倍。中间值问题:当快指针走到尾部的时候,慢指针恰恰走到中间的位置;...原创 2020-03-01 15:44:11 · 319 阅读 · 0 评论 -
如何实现单向链表的反转(详解+代码实现)
单向链表的反转反转API:public void reverse():对整个链表反转;public Node reverse(Node curr):反转链表中的某个结点curr,并把反转后的curr结点返回;使用递归可以完成反转,递归反转其实就是从原链表的第一个存数据的结点开始,依次递归调用反转每一个结点,知道把最后一个结点反转完成,整个链表就反转完毕。代码如下:public class......原创 2020-03-01 14:01:35 · 2997 阅读 · 0 评论 -
什么是双向链表,双向链表各项功能实现(详解+代码实现)
双向链表各项功能(JAVA语言)实现结点API设计:类名: Node构造方法:Node(T t,Node pre,Node next):创建Node对象成员变量: T item:存储数据Node pre:指向上一个结点Node next:指向下一个结点**双向链表的API设计类名:TwoWayLinkList;构造方法:TwoWayLinkList :创建TwoWay...原创 2020-02-29 22:52:12 · 385 阅读 · 0 评论 -
排序算法大全(冒泡排序,选择排序,插入排序,归并排序,希尔排序,快速排序六大排序)
自己用JAVA语言写了一下最经常用的六大排序算法:冒泡排序,选择排序,插入排序,归并排序,希尔排序以及快速排序。点击链接即可获取自己所需的算法。冒泡排序:冒泡排序选择排序:选择排序插入排序:插入排序归并排序:归并排序希尔排序:希尔排序快速排序:快速排序...原创 2020-02-29 20:56:39 · 252 阅读 · 0 评论 -
什么是选择排序,选择排序(详解)
选择排序–JAVA语言实现public class Selection { /* 对数组内的元素进行排序 */ public static void sort(Comparable[] a){ /*for(int i = 0; i < a.length-1; i++){ for(int j = i+1;j &l...原创 2020-02-29 20:49:40 · 661 阅读 · 0 评论 -
什么是冒泡排序,冒泡排序(代码详解)
冒泡排序–JAVA语言实现public class Bubble { /* 对数组a中的元素进行排序 */ public static void sort(Comparable[] a){ for(int i = a.length-1;i > 0;i--){ for(int j = 0; j < i;j...原创 2020-02-29 20:47:49 · 324 阅读 · 0 评论 -
什么是归并排序,归并排序(代码详解)
归并排序–JAVA语言实现public class Merge { //归并所需的辅助数组 private static Comparable[] assit; /* 比较v元素是否小于w元素 */ private static boolean less(Comparable v,Comparable w){ //v<...原创 2020-02-29 20:42:39 · 293 阅读 · 0 评论 -
什么是插入排序,插入排序(代码详解)
插入排序–JAVA语言实现public class Insertion { /* 对数组a中的元素进行排序 */ public static void sort(Comparable[] a){ for(int i = 1; i<a.length; i++){//正面方向一个一个突破 for(int j = i...原创 2020-02-29 20:43:16 · 286 阅读 · 0 评论 -
JAVA语言实现单向链表各项功能的实现
Java语言实现单项链表的各项功能实现。import java.util.Iterator;public class LinkList<T> implements Iterable<T> { //记录头结点 private Node head; //记录链表的长度 private int N; //节点类 privat...原创 2020-02-29 13:06:54 · 214 阅读 · 0 评论 -
什么是顺序表以及顺序表各项功能实现(代码详解)
public class SequenceList<T>{ //存储元素的数据 private T[] eles; //记录当前顺序表中的元素个数 private int N; //构造方法 public SequenceList(int capacity){ //初始化数组 this.eles = (T[...原创 2020-02-28 18:49:54 · 564 阅读 · 0 评论