看动画学算法之:doublyLinkedList】的更多相关文章

目录 简介 doublyLinkedList的构建 doublyLinkedList的操作 头部插入 尾部插入 插入给定的位置 删除指定位置的节点 简介 今天我们来学习一下复杂一点的LinkedList:doublyLinkedList. 和LinkedList相比,doublyLinkedList中的节点除了next指向下一个节点之外,还有一个prev之前的一个节点.所以被称为doublyLinkedList. doublyLinkedList是一个双向链表,我们可以向前或者向后遍历list.…
目录 简介 count排序的例子 count排序的java实现 count排序的第二种方法 count排序的时间复杂度 简介 今天我们介绍一种不需要作比较就能排序的算法:count排序. count排序是一种空间换时间的算法,我们借助一个外部的count数组来统计各个元素出现的次数,从而最终完成排序. count排序的例子 count排序有一定的限制,因为外部的count数组长度是和原数组的元素范围是一致的,所以count排序一般只适合数组中元素范围比较小的情况. 我们举一个0-9的元素的排序的…
目录 简介 linkedList的构建 linkedList的操作 头部插入 尾部插入 中间插入 删除节点 简介 linkedList应该是一种非常非常简单的数据结构了.节点一个一个的连接起来,就成了linkedList.今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的. linkedList的构建 linkedList是由一个一个的节点构成的.而每个节点只需要存储要保存的数据和下一个节点的引用即可. linkedList本身需要一个head节点,所以我们的linkedLi…
目录 简介 栈的构成 栈的实现 使用数组来实现栈 使用动态数组来实现栈 使用链表来实现 简介 栈应该是一种非常简单并且非常有用的数据结构了.栈的特点就是先进后出FILO或者后进先出LIFO. 实际上很多虚拟机的结构都是栈.因为栈在实现函数调用中非常的有效. 今天我们一起来看学习一下栈的结构和用法. 栈的构成 栈一种有序的线性表,只能在一端进行插入或者删除操作.这一端就叫做top端. 定义一个栈,我们需要实现两种功能,一种是push也就是入栈,一种是pop也就是出栈. 当然我们也可以定义一些其他的…
目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复杂度变为O(n),其中n是二叉搜索树的节点个数. 而平衡二叉搜索树正是为了解决这个问题而产生的,它通过限制树的高度,从而将时间复杂度降低为O(logn). AVL的特性 在讨论AVL的特性之前,我们先介绍一个概念叫做平…
目录 简介 队列的实现 队列的数组实现 队列的动态数组实现 队列的链表实现 队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构. 想象一下我们日常的排队买票,只能向队尾插入数据,然后从队头取数据.在大型项目中常用的消息中间件就是一个队列的非常好的实现. 队列的实现 一个队列需要一个enQueue入队列操作和一个DeQueue操作,当然还可以有一些辅助操作,比如isEmpty判断队列是否为空,isFull判断队列是否满员等等. 为了实现在队列头和队列尾进…
目录 简介 散列表的关键概念 数组和散列表 数组的问题 hash的问题 线性探测 二次探测 双倍散列 分离链接 rehash 简介 java中和hash相关并且常用的有两个类hashTable和hashMap,两个类的底层存储都是数组,这个数组不是普通的数组,而是被称为散列表的东西. 散列表是一种将键映射到值的数据结构.它用哈希函数来将键映射到小范围的指数(一般为[0..哈希表大小-1]).同时需要提供冲突和对冲突的解决方案. 今天我们来学习一下散列表的特性和作用. 文末有代码地址,欢迎下载.…
目录 简介 BST的基本性质 BST的构建 BST的搜索 BST的插入 BST的删除 简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的非线性的数据结构. 树是由很多个节点组成的,每个节点可以指向很多个节点. 如果一个树中的每个节点都只有0,1,2个子节点的话,这颗树就被称为二叉树,如果我们对二叉树进行一定的排序. 比如,对于二叉树中的每个节点,如果左子树节点的元素都小于根节点,而右子树的节点的元素都大于根节点,那么这样的树被叫做二叉搜索树(Binary Search…
目录 简介 双向队列的实现 双向队列的数组实现 双向队列的动态数组实现 双向队列的链表实现 双向链表的时间复杂度 简介 dequeue指的是双向队列,可以分别从队列的头部插入和获取数据,也可以从队列的尾部插入和获取数据. 本文将会介绍一下怎么创建dequeue和dequeue的一些基本操作. 双向队列的实现 和普通队列项目,双向队列可以分别在头部和尾部进行插入和删除工作,所以一个dequeue需要实现这4个方法: insertFront(): 从dequeue头部插入数据 insertLast(…
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但是第一个系列还没到开始处理Tinymoe源代码的时候,首先的跟大家讲一讲我设计Tinymoe的故事.为什么这种东西要等到现在才讲呢,因为之前没有文档,将了也是白讲啊.Tinymoe在github的wiki分为两部分,一部分是介绍语法的,另一部分是介绍一个最小的标准库是如何实现出来的,地址在 https://g…