数据结构和算法
一直奋斗的小猿
技术改变未来!
展开
-
二叉排序树中序遍历及节点的查找
代码展示节点类package demo10;public class Node { int value; Node left; Node right; public Node(int value){ this.value=value; } /** * 向子树中添加节点 * @param node ...原创 2020-04-30 12:11:19 · 994 阅读 · 0 评论 -
二叉排序树的概述及中序遍历
概述:首先进行下面的对比:线性结构顺序存储,不排序:查找困难顺序存储,排序:删除插入困难链式存储:无论是否排序,查找困难综合以上特点,我们就想有没有一种结构,能够删除、查找、插入都不是那么困难,能够综合上述优点,这个时候我们就引入了二叉排序树。树结构查找是将查找表按照某种规律建成树结构。因为建构的树结构是按某种规律建立的,因此查找过程也遵循这种规律,可以获得较高的查找效率。1、...原创 2020-04-26 13:49:52 · 4195 阅读 · 0 评论 -
使用赫夫曼编码压缩及解压文件
压缩文件代码展示节点类package demo9;public class Node implements Comparable<Node>{ Byte data; int weight; Node left; Node right; public Node(Byte data,int weight){ this.dat...原创 2020-04-24 13:50:40 · 264 阅读 · 0 评论 -
使用赫夫曼编码进行解码
代码展示节点类package demo9;public class Node implements Comparable<Node>{ Byte data; int weight; Node left; Node right; public Node(Byte data,int weight){ this.data = d...原创 2020-04-23 17:31:49 · 177 阅读 · 0 评论 -
数据压缩之创建赫夫曼编码表(编码)
代码展示节点类package demo9;public class Node implements Comparable<Node>{ Byte data; int weight; Node left; Node right; public Node(Byte data,int weight){ this.data = d...原创 2020-04-21 22:16:09 · 149 阅读 · 0 评论 -
赫夫曼树概述及其创建
概述:由相同权值的一组叶子结点所构成的二叉树可能有不同的形态和不同的带权路径长度,具有最小带权路径长度的二叉树称为赫夫曼(Haffman)树。也称最优二叉树,它是n个带权叶子节点构成的所有二叉树中,带权路径长度最小的二叉树。节点的权:二叉树中的每个叶子节点经常对应一个有实际意义的数据,这个数据称为该节点的权。带权路径长度(WPL):树中所有叶子节点的带权路径长度之和。在二叉树中,二叉树的路...原创 2020-04-16 12:54:11 · 352 阅读 · 0 评论 -
线索二叉树的建立及其遍历
代码展示线索二叉树的建立及其遍历package demo7;public class ThreadedBinaryTree { ThreadedNode root; //用于临时存储前驱节点 ThreadedNode pre=null; //遍历线索二叉树 public void threadIterate(){ //用于临时存储...原创 2020-04-15 11:44:55 · 288 阅读 · 0 评论 -
线索二叉树
线索二叉树在以往介绍的二叉树的遍历中,不是用递归就是用堆栈或队列,本文将通过构建线索二叉树来简化对二叉树遍历的实现。1、线索二叉树的定义按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有节点排列成一个线性序列。在该序列中,除第一个节点外,每个节点有且仅有一个直接前驱节点;除最后一个节点外,每个节点有且仅有一个直接后继节点。但是,二叉树中每个节点在这个序列中的直接前驱节点和直接后继节...原创 2020-04-14 15:23:58 · 155 阅读 · 0 评论 -
排序算法之堆排序
堆排序堆根据其排列特点分为大顶堆和小顶堆。顾名思义,大顶堆是指对于任何一个子树而言,父节点永远大于它的任何一个子节点。那相反,小顶堆是指对于任何一个子树而言,父节点永远小于它的任何一个子节点。如下如所示:我们依次对树中的节点进行编号,映射到数组中就是下面这个样子:堆排序基本思路:首先,我们将n个元素经过比较且交换位置按关键码建成大顶堆,此时堆顶的元素(即此时树中的根节点)是最大的,...原创 2020-04-11 19:27:48 · 363 阅读 · 0 评论 -
顺序存储之前序中序后序遍历二叉树
顺序存储二叉树的遍历顺序存储的二叉树通常情况只考虑完全二叉树第n个元素的左子节点是:2*n+1第n个元素的右子节点是:2*n+2第n个元素的父节点是:(n-1)/2package demo6;public class ArrayBinaryTree { int[] data; public ArrayBinaryTree(int[] data){ ...原创 2020-04-08 18:18:14 · 542 阅读 · 0 评论 -
二叉树前序中序后序遍历、节点的查找及其子树的删除
代码展示package demo5;public class BinaryTree { TreeNode root; //设置根节点 public void setRoot(TreeNode root){ this.root = root; } //获取根节点 public TreeNode getRoot(){ ...原创 2020-04-07 15:22:07 · 247 阅读 · 0 评论 -
二叉树前序中序后序遍历及节点的查找
代码展示package demo5;public class BinaryTree { TreeNode root; //设置根节点 public void setRoot(TreeNode root){ this.root = root; } //获取根节点 public TreeNode getRoot(){ ...原创 2020-04-06 18:26:52 · 417 阅读 · 0 评论 -
链式存储之遍历二叉树
二叉树遍历前序遍历:首先遍历根节点,接着遍历左子树,最后遍历右子树。中序遍历:首先遍历左子树,接着遍历根节点,最后遍历右子树。后序遍历:首先遍历左子树,接着遍历右子树,最后遍历根节点。遍历思想:依据前序、中序、后序遍历的特点,使用递归,依次对二叉树的根节点、左子树和右子树进行遍历。代码展示package demo5;public class BinaryTree { T...原创 2020-04-05 14:49:42 · 179 阅读 · 0 评论 -
创建链式二叉树
创建二叉树代码展示package demo5;public class BinaryTree { TreeNode root; //设置根节点 public void setRoot(TreeNode root){ this.root = root; } //获取根节点 public TreeNode getRoot()...原创 2020-04-03 12:40:59 · 2207 阅读 · 0 评论 -
树概述
树概述树结构:元素至多有一个前驱元素,而可有多个后继元素的情况,我们称之为树结构。为什么使用树结构:线性结构有两种存储结构,分别是顺序存储结构和链式存储结构。相比较而言,顺序存储查询较快,而一旦插入的数据量较大,则插入的速度显得比较慢。而链式存储则缓解了这种情况,但是查询的速度却对而言显得比较缓慢。而树结构则会综合这两种情况,它的查找性能和插入性能则整体比线性结构都要好一些。树的基本概...原创 2020-04-03 10:36:32 · 265 阅读 · 0 评论 -
基数排序之队列实现
基数排序之队列实现package demo4;import demo01.MyQueue;import java.util.Arrays;public class RadixQueueSort { public static void main(String[] args) { int[] arr = new int[]{23,6,189,45,9,287,...原创 2020-04-02 15:12:16 · 361 阅读 · 0 评论 -
排序算法之基数排序
基数排序代码展示package demo4;import java.util.Arrays;public class RadixSort { public static void main(String[] args) { int[] arr = new int[]{23,6,189,45,9,287,56,1,798,34,65,652,5,1024};...原创 2020-03-31 16:02:30 · 311 阅读 · 0 评论 -
排序算法之归并排序
归并排序代码展示package demo4;import java.util.Arrays;public class MergeSort { public static void main(String[] args) { int[] arr = new int[]{1,3,5,2,4,6,8,10}; System.out.println(...原创 2020-03-30 21:30:14 · 93 阅读 · 0 评论 -
排序算法之简单选择排序
简单选择排序package demo4;import java.util.Arrays;public class SelectSort { public static void main(String[] args) { int[] arr = new int[]{3,2,5,8,9,4,6,1,5}; selectSort(arr); ...原创 2020-02-23 18:02:15 · 392 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序package demo4;import java.util.Arrays;public class ShellSort { public static void main(String[] args) { int[] arr = new int[]{5,4,6,3,8,9,4,1,7,2,6}; System.out.println("...原创 2020-02-21 19:11:59 · 151 阅读 · 0 评论 -
排序算法之插入排序
直接插入排序package demo4;import java.util.Arrays;public class InsertSort { public static void main(String[] args) { int[] arr = new int[]{5,3,6,8,9,2,1,4,6}; insertSort(arr); ...原创 2020-02-20 13:30:26 · 146 阅读 · 0 评论 -
排序算法之快速排序
快速排序package demo4;import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int[] arr = new int[]{3,4,6,7,2,7,2,8,0,9,1}; quickSort(arr, 0, a...原创 2020-02-19 21:10:18 · 220 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序package demo4;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{5,7,2,9,4,1,0,5,7}; System.out.println(Arr...原创 2020-02-19 17:31:03 · 374 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
如何衡量一个算法的优劣?一、事后统计的方法简言之就是先让程序在电脑上跑一下,在旁边弄一个计时器进行计数,这样它到底运行了多长时间我们就知道了,这种方法可行,我们可以知道运行了多久,但是问题是同一个程序在计算机上运行时,运行同一个程序,执行同一个任务,它占用的时间实际上和计算机当时的很多状况有关系,比如计算机当时的内存占用情况,还有当时CPU的占用情况,等等,甚至还和这台计算机本身有很大的关系...原创 2020-02-18 22:59:57 · 528 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题package demo3;public class TestHanoi { public static void main(String[] args) { hanoi(5,'A','B','C'); } /** * @param n 共有n个盘子 * @param from 开始的柱子 * @par...原创 2020-02-18 17:31:32 · 177 阅读 · 0 评论 -
递归和斐波那契
递归:在一个方法(函数)的内部调用该方法(函数)本身的编程方式递归package demo3;public class TestRecursive { public static void main(String[] args) { print(3); } //递归 public static void print(int i){...原创 2020-02-18 16:25:57 · 97 阅读 · 0 评论 -
双向循环链表
双向循环链表package demo01;public class DoubleNode { //上一个节点 DoubleNode pre = this; //下一个节点 DoubleNode next = this; //节点数据 int data; public DoubleNode(int data){ thi...原创 2020-02-17 15:04:02 · 86 阅读 · 0 评论 -
循环链表
双向链表package demo01;//一个节点public class LoopNode { //结点内容 int data; //下一个节点 LoopNode next = this; public LoopNode(int data){ this.data = data; } //插入一个节点作为当...原创 2020-02-17 09:53:15 · 103 阅读 · 0 评论 -
单链表
单链表基本操作package demo01;//一个节点public class Node { //结点内容 int data; //下一个节点 Node next; public Node(int data){ this.data = data; } //为节点追回节点 public Node appe...原创 2020-02-14 23:32:03 · 103 阅读 · 0 评论 -
队列
package demo01;public class MyQueue { int[] elements; public MyQueue() { elements = new int[0]; } //入队 public void add(int element) { //创建一个新的数组 int[] ...原创 2020-02-13 21:51:40 · 96 阅读 · 0 评论 -
栈
package demo01;public class MyStack { //栈的底层我们使用数组来存储数据 int[] elements; public MyStack(){ elements = new int[0]; } //压入元素 public void push(int element){ //...原创 2020-02-13 12:49:15 · 91 阅读 · 0 评论 -
数组
package com.atone.jdbc;/** * 数组的创建 */public class TestArray { public static void main(String[] args) { //创建一个数组 int []arr1 = new int[3]; //获取数组长度 int length1 =...原创 2020-02-11 23:07:36 · 100 阅读 · 0 评论 -
数据结构和算法之稀疏数组
数据结构和算法一、线性结构和非线性结构数据结构包括:线性结构和非线性结构1、线性结构(1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系(2)线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中的存储元素是连续(指地址连续)的链式存储的线性表称为链表,链表中的存储(3)元素不一定是连续的,元素节点中...原创 2019-08-17 16:54:17 · 173 阅读 · 0 评论 -
数据结构和算法之哈希表(散列)的介绍和内存布局
散列表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数据叫做散列表。在写了一段java程序,java程序要去操作数据库,然后数据库经过一番操作将结果返回给java程序,java程序拿到结果进行显示,数据一般是放...原创 2019-08-25 15:24:20 · 1202 阅读 · 0 评论