随笔分类 - 动画学算法
看动画学算法和数据结构
摘要:简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的非线性的数据结构。 树是由很多个节点组成的,每个节点可以指向很多个节点。 如果一个树中的每个节点都只有0,1,2个子节点的话,这颗树就被称为二叉树,如果我们对二叉树进行一定的排序。 比如,对于二叉树中的每个节点,如果左子树节
阅读全文
摘要:简介 java中和hash相关并且常用的有两个类hashTable和hashMap,两个类的底层存储都是数组,这个数组不是普通的数组,而是被称为散列表的东西。 散列表是一种将键映射到值的数据结构。它用哈希函数来将键映射到小范围的指数(一般为[0..哈希表大小-1])。同时需要提供冲突和对冲突的解决方
阅读全文
摘要:简介 dequeue指的是双向队列,可以分别从队列的头部插入和获取数据,也可以从队列的尾部插入和获取数据。 本文将会介绍一下怎么创建dequeue和dequeue的一些基本操作。 双向队列的实现 和普通队列项目,双向队列可以分别在头部和尾部进行插入和删除工作,所以一个dequeue需要实现这4个方法
阅读全文
摘要:简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构。 想象一下我们日常的排队买票,只能向队尾插入数据,然后从队头取数据。在大型项目中常用的消息中间件就是一个队列的非常好的实现。 队列的实现 一个队列需要一个enQueue入队列操作和一个DeQueue操作,当然还可以有一些辅
阅读全文
摘要:简介 平衡二叉搜索树是一种特殊的二叉搜索树。为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表。从而导致搜索的时间复杂度变为O(n),其中n是二叉搜索树的节点个数。 而平衡二叉搜索树正是为了解决这个问题而产生的,它通
阅读全文
摘要:简介 栈应该是一种非常简单并且非常有用的数据结构了。栈的特点就是先进后出FILO或者后进先出LIFO。 实际上很多虚拟机的结构都是栈。因为栈在实现函数调用中非常的有效。 今天我们一起来看学习一下栈的结构和用法。 栈的构成 栈一种有序的线性表,只能在一端进行插入或者删除操作。这一端就叫做top端。 定
阅读全文
摘要:简介 今天我们来学习一下复杂一点的LinkedList:doublyLinkedList。 和LinkedList相比,doublyLinkedList中的节点除了next指向下一个节点之外,还有一个prev之前的一个节点。所以被称为doublyLinkedList。 doublyLinkedLis
阅读全文
摘要:简介 linkedList应该是一种非常非常简单的数据结构了。节点一个一个的连接起来,就成了linkedList。今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的。 linkedList的构建 linkedList是由一个一个的节点构成的。而每个节点只需要存储要保存的数据和下一
阅读全文
摘要:简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀。 而解决大范围的元素排序的办法就是基数排序。 基数排序的例子 什么是基数排序呢? 考虑一下,虽然我们不能直接将所有范围内的数字都
阅读全文
摘要:简介 今天我们介绍一种不需要作比较就能排序的算法:count排序。 count排序是一种空间换时间的算法,我们借助一个外部的count数组来统计各个元素出现的次数,从而最终完成排序。 count排序的例子 count排序有一定的限制,因为外部的count数组长度是和原数组的元素范围是一致的,所以co
阅读全文
摘要:简介 快速排序也采用的是分而制之的思想。那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并。 而快速排序虽然也是拆分,但是拆分之后的操作是从数组中选出一个中间节点,然后将数组分成两部分。 左边的部分小于中间节点,右边的部分大于中间节点
阅读全文
摘要:简介 归并排序简称Merge sort是一种递归思想的排序算法。这个算法的思路就是将要排序的数组分成很多小的部分,直到这些小的部分都是已排序的数组为止(只有一个元素的数组)。 然后将这些排序过的数组两两合并起来,组成一个更大一点的数组。接着将这些大一点的合并过的数组再继续合并,直到排序完整个数组为止
阅读全文
摘要:简介 选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交互。 因为首先做的是一个选择的过程,所以叫做选择排序。 选择排序的例子 假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行选择排序呢? 先看一个动画: 选择排序的原理如下: 8个数字
阅读全文
摘要:简介 插入排序就是将要排序的元素插入到已经排序的数组中,从而形成一个新的排好序的数组。 这个算法就叫做插入排序。 插入排序的例子 同样的,假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行插入排序呢? 先看一个插入排序的动画,对它有个直观的了解: 我们来分析一下排序的流
阅读全文
摘要:简介 排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。 排序算法有很多种,每个都有其自身的优点和局限性。 今天我们来学习最最简单的冒泡排序算法。 冒泡排序的原理 冒泡排序的原理很简单,我们想象一下一个一个的气泡上浮的过
阅读全文