![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 96
Wenqi_B
To do one thing well!
展开
-
中缀表达式的计算(栈的应用)
ArrayList和LinkedList的实现方式ArrayList的底层实现是可以增长的数组,LinkedList的底层是使用了双链表。从底层实现来看,我们可以知道,ArrayList 获取元素的时间复杂度仅为常数,而 插入和 删除的时间复杂度都为线性时间复杂度O(n)。而LinkedList则刚好相反,因为底层是链表,所以 插入和 删除的时间复杂度为常数,而 获取元素的时间复杂度却是线性时间复杂原创 2017-08-09 22:10:38 · 2861 阅读 · 0 评论 -
AVL树
什么是AVL树?AVL树,又称为平衡二叉树,它是一种特殊的二叉查找树(Binary Search Tree, BST),其每一个节点的左右子树的高度差不超过1。注意,一个节点的高度是从该节点到叶子节点的最长路径,所以,叶子节点的高度为0,而深度是指一个节点到树根的路径长度,两者是相反的概念。 一棵树的高度等于根节点的高度,而深度等于最大深度的叶子节点的深度,所以一个树的高度和深度是相同的。 二叉查原创 2017-08-16 17:14:35 · 2014 阅读 · 1 评论 -
伸展树(splay tree)
什么是伸展树?首先,伸展树(splay tree)是一颗二叉搜索树,它的定义是建立在二叉搜索树之上,并且它是基于类似程序局部性原理的假设:一个节点在一次被访问后,这个节点很可能不久再次被访问。那么伸展树的做法就是在每次一个节点被访问后,我们就把它推到树根的位置。正像程序局部性原理的实际效率被广泛证明一样,伸展树在实际的搜索效率上也是非常高效的。尽管存在最坏情况下单次操作会花费O(N)的时间,但是这种原创 2017-08-20 21:45:10 · 958 阅读 · 0 评论 -
散列
散列表的基本思想是将关键字(key)通过散列函数映射到表中的一个位置,在查找的时候只要通过关键字就可以直接获取对应位置的值。那么主要的问题就是如何设计散列函数和如何在不同的关键字映射到同一位置的时候处理冲突。注意我们现在讨论的存放的仅仅是关键字,实际情况存放的是关键字+值。 处理冲突的方法分离链表法也称为拉链法,其基本思想是在冲突发生后使用链表来存储关键字散列值相同的值,查询的过程包括一次散列函数原创 2017-10-07 16:55:02 · 469 阅读 · 0 评论 -
优先队列(堆)
优先队列也就是我们常说的小根堆,它至少支持两种操作:插入,删除最小者,它的一种实现方式是二叉堆。 二叉堆二叉堆具有结构性和堆序性,所谓结构性,是指二叉堆是一颗完全二叉树,而堆序性是指根节点的值应该是最小的。其实堆有一个递归的定义方式:1)堆的根小于它的左右子孩子,2)它的左右子树也是堆。堆既然是一颗完全二叉树,那么我们就可以用数组的方式来存储堆,而下标的值则已经蕴含了父子关系的信息,如果从1开始存原创 2017-10-08 11:55:49 · 249 阅读 · 0 评论 -
深入理解排序算法java版
简单插入排序插入排序的基本思想是将整个排序序列划分成“有序区间”和“无序区间”,然后逐个将无序区间中的元素插入到前面有序区间了,逐步将这个区间变有序。其算法复杂度为O(n^2) 其算法描述如下: 描述:插入排序输入:待排序数组array,数组最后一个元素位置lastIndex输出:排序好的数组array从i=2位置作为待插入元素,直至最后一个元素,循环如下操作 设置array[0]为原创 2017-10-19 21:13:41 · 210 阅读 · 0 评论 -
深入理解红黑树原理与实现(附Java源码)
红黑树(RBTree)是一种相比平衡二叉树(AVL)平衡要求较低的的一种二叉搜索树,所谓平衡要求较低的意思是相比AVL树的每个节点的左右子树的高度差不能超过2,红黑树使用红黑两种颜色来标记二叉搜索树中的节点,并对这种着色进行限制,使得在插入删除操作后对不符合的情况必须进行调整来保持这样一种限制,从而实现自我平衡。我们先来看一下红黑树的定义,也就是着色限制 * 每个节点必须着色成红色或者黑色原创 2018-01-03 22:05:29 · 2189 阅读 · 0 评论