数据结构
AKA石头
把握时间,掌握方向
展开
-
AVl平衡二叉树的增、删、查 java实现
为什么引入AVL树?给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.上边BST 存在的问题分析:左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响 查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢解决方案-平衡二叉树(AVL)基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树,可以保证查询效率较高。原创 2020-06-13 12:19:49 · 207 阅读 · 0 评论 -
二叉排序树(BST)的增、删、查 java实现
为什么要引入BST(Best Sort Tree)?使用数组数组未排序优点:直接在数组尾添加,速度快。缺点:查找速度慢.数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。使用二叉排序树BST(Binary Search Tree)目的是为了提高查找的性能,其查找在平均和最坏的情况下都是logn级别,接近二原创 2020-06-13 12:08:57 · 269 阅读 · 0 评论 -
十大排序算法之堆排序,最优实现
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为0(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆堆排序的基本思想将待排序序列构造成一个大顶堆 此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此原创 2020-06-09 11:28:13 · 449 阅读 · 0 评论 -
顺序存储结构的二叉树前、中、后序遍历
顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为2*n+1第n个元素的右子节点为2*n+2第n个元素的父节点为(n-1)/2n:表示二叉树中的第几个元素(如图所示)代码实现package com.edu.tree;/** * @Date 2020/6/6 22:17 * @Author by LiShiYan * @Description 顺序存储二叉树 */public class ArrBinaryTreeDemo { public s原创 2020-06-06 22:55:43 · 922 阅读 · 1 评论 -
哈希表的插入、查找、删除、遍历java实现
哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash)函数。散列函数散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将原创 2020-06-04 22:01:37 · 2893 阅读 · 1 评论 -
图的广度优先搜索(Broad First Search)算法实现
图的广度优先搜索(Broad First Search)图的广度优先搜索类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点广度优先遍历算法步骤1)访问初始结点v并标记结点v为已访问。2)结点v入队列3)当队列非空时,继续执行,否则算法结束。4)出队列,取得队头结点u。5)查找结点u的第一个邻接结点w。6)若结点u的邻接结点w不存在,则转到步骤3;否则循环执行以下三个步骤:6.1若结点w尚未被访问,则访问结点w并标记为已原创 2020-06-04 16:59:44 · 601 阅读 · 0 评论 -
图的深度优先搜索(Depth First Search)算法实现
图的深度优先搜索(Depth First Search)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点,可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。我们可以看到,这样的访问策略是优先往纵向挖掘深入,而不是对一个结点的所有邻接结点进行横向访问。显然,深度优先搜索是一个递归的过程算法访问初始结点v,并标记结点v为已访问。查找结点原创 2020-06-04 16:56:42 · 938 阅读 · 0 评论 -
java删除数组中间的某一个元素
本文只演示删除操作,添加数组元素不在演示public class ArrayDemo { private int[] array; private int size;//数组中元素的总个数 public ArrayDemo(int capacity) { this.array = new int[capacity]; size = 0; ...原创 2020-03-05 14:03:04 · 2168 阅读 · 0 评论 -
使用稀疏数组保存棋盘到磁盘并从磁盘导入稀疏数组
使用稀疏数组保存棋盘到磁盘并从磁盘导入稀疏数组sparseArray基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的 规模图示创建一个原始的二维数组11*11,使用print方法输出,1表示黑子...原创 2020-01-05 13:24:05 · 930 阅读 · 0 评论