首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
数据结构Java版之递归与迭代算法(五)
】的更多相关文章
数据结构Java版之递归与迭代算法(五)
递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数列来说明递归与迭代的区别. 先介绍一下Fibonacci数列: 无穷数列 1,1,2,3,5,8,13,......称为Fibonacci数列 除了第一个数和第二个数都等于 1 .后续的数都是前两个数之和. 递归版Fibonacci : public int fibonacci(int n) {…
数据结构Java版之交换算法(一)
交换的本质是拷贝,其中拷贝包括两种方式.值拷贝和指针拷贝,在java中没有指针,为此,我们可以理解为地址拷贝,在我看来,指针就是地址. 1.传值方式示例: 由上述示例可得,传值,不能起到交换的作用,原有变量的值仍未改变. 2.传址方式示例: 该示例通过创建一个类对象Int,为该对象的成员变量num赋值,将对象Int传入swap函数中,起到一个传址的作用.然后对其num属性进行交换.达到真正的交换目的. 值得一说的是,对象本身就是一个地址.我们可以通过打印x来验证:…
数据结构Java版之查找算法(三)
关于查找算法,这里只进行两个算法的说明.包括 顺序查找 和 折半查找. 顺序查找: 顺序查找常用于未排序的数据中.查找速度较慢,只能应用于较小的数据量. public int sequentialSearch(int[] list, int ele) { for(int i = 0; i < list.length; i ++) { if(ele == list[i]) return i; } return -1; } 折半查找: 比较快的查找算法,但也仅限于对排好序的数据进行查找. publi…
数据结构Java版之排序算法(二)
排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小的数在最后一位,将最后一位一步步移到第一位. public void bubbleSort(int[] list) { int n = list.length - 1; for(int i = 0; i < n; i ++) { for(int j = 0; j < n - i; j ++) {…
数据结构Java版之广度优先图(十三)
广度优先,则是用的队列,将每一层的节点先存入队列中去,后依次取出队列中的节点,显示与当前节点存在边,但是未被访问过的节点,也就是下一层与之相联系的节点,再将这些节点存入队列.经过层层迭代,就可以完全遍历 整个图. 源码: package mygraph; import java.util.LinkedList; import java.util.Queue; public class BFS_Vertex { class Vertex { private char lable; private…
数据结构Java版之二叉查找树(七)
二叉查找树(BST : BInary Search Tree) 二叉查找树的性质: 1.每一个元素有一个键值 2.左子树的键值都小于根节点的键值 3.右子树的键值都大于根节点的键值 4.左右子树都是二叉查找树 二叉查找树查找一个数据的速度非常快,在庞大的数据中,左右来回较少的次数就能找到.下面来做一个二叉查找树. 1.创建一个节点类: // 树节点 class TreeNode { public char val; public TreeNode left; public TreeNode ri…
数据结构Java版之基数排序(四)
基数排序: 基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排.这里介绍第一种LSD排序算法. 首先,我们先了解什么是基数.基数是根据具体的排序情况而定的,比如我们常见的基数是十进制-10,还有二进制-2. 其次,要熟记基数排序的思想:通过对每一个位上的值相排序,就可以完成对整个数组的排序. 基数排序的算法实现流程:遍历所有数组元素,找出元素最大的位值 -------->从低位到高位把数组元素上的位值存入链表中-------->遍历所有链表,将链表里面的值…
数据结构Java版之深度优先-图(十二)
这里用深度优先遍历存在矩阵里面的图. 深度优先利用的是栈的FIFO特性.为此遍历到底后,可以找到最相邻的节点继续遍历.实现深度优先,还需要在节点加上一个访问标识,来确定该节点是否已经被访问过了. 源码: package mygraph; import java.util.Stack; public class DFS_Vertex { //创建一个我们需要的节点类 class Vertex { private char lable; private int val; private boolea…
数据结构Java版之邻接矩阵实现图(十一)
邻接矩阵实现图,是用一个矩阵,把矩阵下标作为一个顶点,如果顶点与顶点之间有边.那么在矩阵对应的点上把值设为 1 .(默认是0) package mygraph; import java.util.List; /** * 邻接矩阵表示图 * @author Ranter * */ public class Vertex { private char lable; //矩阵元素 private int[][] list = new int[20][20]; private char[] vertex…
数据结构Java版之邻接表实现图(十)
邻接表实现图,实际上是在一个数组里面存放链表,链表存放的是连接当前节点的其他节点. package mygraph; import java.util.ArrayList; import java.util.List; public class Table { private List<List<Character>> list; private List<Character> headNodes; private int n; private int nVerts;…