
java数据结构
郝穹
这个作者很懒,什么都没留下…
展开
-
Java数据结构_12.哈夫曼树(赫夫曼树、最优二叉树) 上
一、哈夫曼树概述哈夫曼树也叫最优二叉树,它是n个带权叶子节点构成的所有二叉树中,带权路径长度最小的二叉树。叶节点的带权路径:从根节点出发,经过的节点的数量乘以叶子节点的权值。树的带权路径长度WPL:树中所有叶子节点的带权路径长度之和。WPL:权值越大的节点离根节点越近的二叉树才是最优二叉树。二、创建哈夫曼树流程排序取出根节点权值最小的两棵二叉树组成一颗新的二叉树,前面取出来的两棵二叉树是新二叉树的两个子树根节点的权值是前面取出来的两棵二叉树的根节点的权值之和再重新排序…递归原创 2020-08-31 16:46:29 · 223 阅读 · 0 评论 -
Java数据结构_11.线索二叉树
中序线索化二叉树线索化二叉树时,一个节点的前一个节点,叫前驱节点线索化二叉树时,一个节点的后一个节点,叫后继节点package com.demo3;public class ThreadedBinaryTree { ThreadedTreeNode root;// 根节点 // 用于临时存储前驱节点 ThreadedTreeNode pre = null; // 遍历线索二叉树 public void threadIterate() { // 用于临时存储当前遍历节点 Thr原创 2020-08-05 19:50:36 · 202 阅读 · 0 评论 -
Java数据结构_10.常用排序算法_堆排序
堆排序原理:将数组转为完全二叉树再转为大顶堆,然后将根节点与叶子节点的最后一个值调换,找到最大值,将最大值取出,现在又变成一个完全二叉树,继续将这个完全二叉树转成大顶堆,以此类推,直至找到所有的最大值。升序排序用大顶堆,降序排序用小顶堆大顶堆:父节点总比两个子节点的权值要大package com.paixu;import java.util.Arrays;public class HeapSort { public static void main(String[] args) {原创 2020-08-05 16:58:47 · 176 阅读 · 0 评论 -
Java数据结构_9.树结构_顺序存储的二叉树
顺序存储二叉树概述顺序存储的二叉树通常情况只考虑完全二叉树性质:第n个元素的左子节点是:2*n+1第n个元素的右子节点是:2*n+2第n个元素的父节点是:(n-1)/2顺序存储的二叉树遍历package com.demo2;public class ArrayBinaryTree { int[] data; public ArrayBinaryTree(int[] data) { this.data = data; } public void frontShow() {原创 2020-08-05 16:31:25 · 149 阅读 · 0 评论 -
Java数据结构_8.树结构_链式存储的二叉树
一、树结构概述根节点:1号节点双亲节点:10号节点和11号节点的双亲节点是5号节点子节点:7、8、9号节点是4号节点的子节点路径:1号到11号的路径:1、2、5、11节点的度:子节点的个数,1号的度为3节点的权:节点存储的值叶子节点:没有子节点的节点,10、11、6、3、7、8、9都是叶子节点子树:5、10、11组成的树是整个树的子树层:1是1层,2、3、4是2层,5、6、7、8、9是3层,10、11是4层树的高度:最高层数,即为4森林:是m(m≥0)棵互不相交的树的集合。任何一棵树原创 2020-08-05 15:11:36 · 217 阅读 · 0 评论 -
Java数据结构_7.排序算法(冒泡排序、快速排序、插入排序、希尔排序、选择排序、归并排序、基数排序、队列实现基数排序)
一、冒泡排序package com.paixu;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { int[] arr = new int[] { 5, 7, 2, 15, 6, 9, 7, 3, 6, 8 }; System.out.println("排序前:" + Arrays.toString(arr)); bubbleSort(arr); S原创 2020-08-04 20:47:04 · 248 阅读 · 1 评论 -
Java数据结构_6.递归(斐波那契和汉诺塔)
一、递归package com.xianxing.digui;/** * 递归 * * @author l1 * */public class TestRecursive { public static void main(String[] args) { print(10);// 10 9 8 7 6 5 4 3 2 1 } public static void print(int i) { if (i > 0) { System.out.print(i原创 2020-08-03 18:54:57 · 147 阅读 · 0 评论 -
Java数据结构_5.链表(单链表、循环链表、双向循环链表)
一、单链表代码实现package com.xianxing.lianbiao;//一个节点public class Node { // 节点内容 int data; // 下一个节点 Node next; public Node(int data) { this.data = data; } // 为节点追加节点 public Node append(Node node) { // 当前节点 Node currentNode = this; while (t原创 2020-08-03 16:28:09 · 174 阅读 · 0 评论 -
Java数据结构_4.队列
一、队列二、代码实现package com.xianxing.queue;/** * 队列:先进先出 * * @author l1 * */public class MyQueue { int[] elements; public MyQueue() { elements = new int[0]; } // 查看队列中所有元素 public String show() { String stringQueue = ""; for (int i = 0; i原创 2020-08-03 12:17:52 · 124 阅读 · 0 评论 -
Java数据结构_3.栈
一、入栈图二、代码实现package com.xianxing.stack;/** * 栈 * * @author l1 * */public class MyStack { // 栈的底层我们使用数组存储数据 int[] elements; public MyStack() { elements = new int[0]; } // 入栈(压入元素) public void push(int element) { int newArr[] = new int原创 2020-08-03 12:01:51 · 148 阅读 · 0 评论 -
Java数据结构_2.数组的查找算法
一、线性查找package com.xianxing.array;/** * 线性查找 * * @author l1 * */public class TestSearch { public static void main(String[] args) { // 目标数组 int[] arr = new int[] { 2, 15, 3, 6, 4, 86, 96, 41 }; // 目标元素 int target = 6; // 目标元素所在下标 int原创 2020-08-03 11:19:24 · 209 阅读 · 0 评论 -
Java数据结构_1.数据结构与算法&数组
一、数据结构与算法概述1.数据结构概述(1)什么是数据结构?数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。(2)数据的存储结构分为顺序存储结构和链式存储结构(3)数据的逻辑结构集合 无关系线性结构 一对一树形结构 一对多图形结构 多对多2.算法概述(1)算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。(2)特性a输入:算法具有零个或多个输入b输原创 2020-08-02 21:03:12 · 150 阅读 · 0 评论