
数据结构与算法
文章平均质量分 85
整理总结常见数据结构与算法知识,并采用Java实现。
sun_lm
这个作者很懒,什么都没留下…
展开
-
排序算法简介及Java实现
常见的排序算法有冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序,堆排序。其中,各算法的时间复杂度和空间复杂度如下表所示算法比较 算法 时间复杂度(平均情况) 空间复杂度 时间复杂度(最坏情况) 算法稳定性 冒泡排序 N*N 1 N*N 稳定 选择排序 N*N 1 N*N 不稳定? 插入排序 ...原创 2021-08-08 16:34:40 · 84 阅读 · 0 评论 -
数据结构(八):散列表
散列的基本思想假设有N对键值对需要存储,且所有的键都是互不相同的小整数,则可以使用一个大小为M的数组存储这些键值对,其中数组的长度M要大于所有键中的最大值。这样,在存储的时候,可以直接用键key作为数组的索引,该索引对应的位置存放的就是key相对应的值value。由于所有键相互之间可能并不是连续的,所以数组中有些位置可能是空的,没有存储值,相当于有一些内存被浪费了。但是,采用此种方式存储数...原创 2019-05-10 17:44:36 · 471 阅读 · 0 评论 -
数据结构(七):红黑树
从2-3查找树开始在二叉查找树中,每个结点都有1个键和2条指向子节点的链接,我们在此称其为2-结点。为了保证查找树的平衡性,我们引入一种新的结点,该结点具有2个键以及3条指向子节点的链接,称为3-结点。将含有2-结点和3-结点的树称为一颗2-3查找树。一颗2-3查找树的如下图所示。对2-3树的查找同一般的二叉查找树类似,查找过程如下图所示,无需赘述。下面重点讲一下2-3树中的插...原创 2019-05-08 20:51:08 · 479 阅读 · 0 评论 -
数据结构(六):伸展树简介
一、伸展树简介伸展树与AVL树一样,也是一种特殊的二叉查找树。通常,我们对数据的访问具有一定得局部性:即是刚刚被访问过的数据,极有可能很快的被再次访问。这在信息的处理过程中很常见。对应到二叉查找树中,也就是说,刚刚被访问过的结点,很有可能很快会被再次访问。或者说,下一次将要访问的结点很可能就在刚刚被访问过的结点的附近。对于一颗规模为N的AVL树来说,连续的m次查找访问(m>>...原创 2019-04-29 16:54:42 · 473 阅读 · 0 评论 -
数据结构(五):AVL树简介及Java实现
AVL树简介AVL树是被最先发明的一种较为简单的平衡二叉查找树。它的特点是:1.本身首先是一棵二叉查找树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子LoadFactor)最多为1。(根结点的高度最高,最底层的叶结点的高度最低且为1。由叶结点向上到树的根结点,树的高度不断增加。例如,只有一个结点的树,该结点即是根结点,高度为1;有两个结点的树,叶结点的高度为...原创 2018-09-28 20:40:31 · 899 阅读 · 2 评论 -
二叉树的重构
二叉树的重构是指给定二叉树的先序遍历,中序遍历,后序遍历中的任意两者,要求恢复二叉树的结构。其中,除非二叉树是真二叉树(即任一节点要么具有两个子节点,要么没有子节点),否则,必须要有中序遍历才能恢复二叉树的结构。先序遍历+中序遍历:后序遍历+中序遍历:由图示可知,根据先序遍历或者后序遍历,可以确定根节点,再通过此根节点,再中序遍历中可以确定左子树和右子树,从而可以减...原创 2019-04-18 20:51:19 · 2563 阅读 · 0 评论 -
二叉树的遍历
常见的二叉树的四种遍历方式为先序遍历,中序遍历,后序遍历及层次遍历。所谓的先序、中序及后序遍历,都是先递归的访问左子树,再递归访问右子树,而根结点要么是在访问左子树之前访问,要么是在左子树之后右子树之前访问,要么是在右子树之后访问,这就是对应了先序、中序及后序遍历。也就是如下:先序是:根左右中序是:左根右后序是:左右根而层次遍历是从上到下按照每一层的顺序遍历,每一层中按照从左...原创 2018-07-30 19:02:42 · 126 阅读 · 0 评论 -
数据结构(四):二叉查找树简介及Java实现
二叉查找树中,每个节点的左子树中的所有节点都小于该节点,而其右子树中的所有节点都大于该节点。通常情况下,二叉树的平均深度都约为C*log(N),C为常数。所以其读取、插入删除的复杂度都为log(N)。但是在极端情况下二叉查找树会退化为一条链表,比如将一系列已经排好序的节点插入一棵树中时。二叉查找树的Java实现如下。public class BinarySearchTree<Key...原创 2019-04-27 00:17:46 · 98 阅读 · 0 评论 -
数据结构(三):队列Queue简介及其Java实现
队列是先进先出。其实现可以采用链表实现,也可以采用数组实现。基于数组的实现较为麻烦,需要考虑下标回绕的问题。基于链表的实现import java.util.Iterator;import java.util.NoSuchElementException;/** * 先进先出队列,基于单向链表的实现 * @author lm * * @param <Item> *...原创 2019-04-27 12:47:39 · 191 阅读 · 0 评论 -
数据结构(二):栈Stack简介及其Java实现
栈是先进后出。其实现主要有两种,一种是基于链表的实现,一种是基于数组的实现。基于链表的实现import java.util.Iterator;import java.util.NoSuchElementException;/* * 基于单向链表实现的栈,先进后出 */public class Stack<Item> implements Iterable<I...原创 2019-04-27 12:41:24 · 101 阅读 · 0 评论 -
数据结构(一):表List的简介及其两种实现方式
表List是一种一维的数据结构,原创 2019-04-26 16:09:19 · 1355 阅读 · 0 评论