数据结构
huangshulang1234
这个作者很懒,什么都没留下…
展开
-
Java之Queue
Queue是一种很常见的数据结构类型,在Java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。java中具有Queue功能的类主要有如下几个:AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue...转载 2019-10-29 14:05:39 · 835 阅读 · 0 评论 -
数据结构-散列表
1 散列表散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表”,散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置,所以散列表其实就是数组的一种扩展,由数组演化而来。如果没有数组,就没有散列表。image白话有 89 名选手参加学校运动会,每一...转载 2019-10-24 16:41:36 · 613 阅读 · 0 评论 -
数据结构:八大数据结构分类
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-23 17:22:43 · 324 阅读 · 0 评论 -
常用数据结构——树
树(Tree)的基本概念树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。二叉树每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质1.若二叉树的层次从0开始,则...转载 2019-10-23 17:27:36 · 451 阅读 · 0 评论 -
查找--理解哈希算法并实现哈希表
查找--理解哈希算法并实现哈希表我们喜欢使用数组进行数据的查找,就是因为数组是一种“随机存取”的数据结构,我们根据数组的起始地址和数组元素的下标值就可以直接计算出每一个数组元素的存储位置,所以它的查找时间是O(1),而与数组的个数无关。我们在这个思想的基础上,可以联想到,如果有一种数据结构,让我们在进行关键字查找的时候,也可以像数组一样,进行随机存储,使其时间复杂度从O(n)降转载 2018-03-21 09:22:04 · 671 阅读 · 1 评论 -
Java数据结构与算法解析(十五)——左式堆
Java数据结构与算法解析(十五)——左式堆左式堆概述左式堆(leftist tree 或 leftist heap),又被成为左偏树、左倾堆,最左堆等。 它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到”对两个优先队列进行合并”的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左式堆,则可以很好地解决这类问题。上图是一颗左倾树,它的节点除了和二叉转载 2018-03-20 09:08:38 · 231 阅读 · 0 评论 -
Java数据结构与算法解析(十三)——优先级队列
Java数据结构与算法解析(十三)——优先级队列在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象。最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(P转载 2018-03-20 09:08:02 · 176 阅读 · 0 评论 -
Java数据结构与算法解析(十二)——散列表
Java数据结构与算法解析(十二)——散列表散列表概述散列表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。散列表的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复转载 2018-03-20 09:07:45 · 235 阅读 · 0 评论 -
Java数据结构与算法解析(十一)——红黑树
Java数据结构与算法解析(十一)——红黑树前面一篇文章介绍了2-3查找树,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree)红黑树的介绍红黑树(Red-Black转载 2018-03-20 09:07:28 · 146 阅读 · 0 评论 -
Java数据结构与算法解析(十)——2-3树
Java数据结构与算法解析(十)——2-3树二叉查找树对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。在一棵具有N 个节点的树中,我们希望该树的高度能够维持在lgN转载 2018-03-20 09:07:13 · 146 阅读 · 0 评论 -
Java数据结构与算法解析(九)——B树
Java数据结构与算法解析(九)——B树B树简介定义在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。特点阶为M的B树是一颗具有以下特点的树: 1.数据项存储在树叶上 2.非叶子节点直到M-1个关键字以指示搜索的方向:关键字i代表子树i+1转载 2018-03-20 09:06:56 · 208 阅读 · 0 评论 -
Java数据结构与算法解析(八)——伸展树
Java数据结构与算法解析(八)——伸展树伸展树简介伸展树(Splay Tree)是特殊的二叉查找树。 它的特殊是指,它除了本身是棵二叉查找树之外,它还具备一个特点: 当某个节点被访问时,伸展树会通过旋转使该节点成为树根。这样做的好处是,下次要访问该节点时,能够迅速的访问到该节点。特性1.和普通的二叉查找树相比,具有任何情况下、任何操作的平摊O(log2n)转载 2018-03-20 09:06:38 · 191 阅读 · 0 评论 -
Java数据结构与算法解析(六)——AVL树
Java数据结构与算法解析(六)——AVL树之前我们说过普通二叉查找树的删除算法会使得左子树比右子树深,因为我们总是用右子树的一个来代替删除的节点。会造成二叉查找树,严重的不平衡。AVL树简介而AVL树就是解决普通二叉查找树弊端的方法,他是带有平衡条件的二叉查找树,这个平衡条件必须容易保持,而且它保证树的深度必须是O(logN).AVL树是高度平衡的而二叉树。它转载 2018-03-20 09:05:48 · 203 阅读 · 0 评论 -
Hash算法总结
Hash算法总结1. Hash是什么,它的作用先举个例子。我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人很多,身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人,但显然,这样做并不实际。而指纹看上去是一种不错的选择,虽然一些专业组织仍然可以模转载 2018-03-21 09:25:40 · 633 阅读 · 0 评论 -
Java数据结构与算法解析(十七)——斜堆
Java数据结构与算法解析(十七)——斜堆斜堆概述斜堆(Skew heap)也叫自适应堆(self-adjusting heap),它是左斜堆的一个变种。和左倾堆一样,它通常也用于实现优先队列;作为一种自适应的左斜堆,它的合并操作的时间复杂度也是O(lg n)。 它与左斜堆的差别是: (1) 斜堆的节点没有”零距离”这个属性,而左斜堆则有。 (2) 斜堆的合并操作和转载 2018-03-21 09:26:04 · 569 阅读 · 0 评论 -
数据结构-6-复杂链表复制
数据结构-6-复杂链表复制复制复杂链表:一个链表的每一个节点,有一个指向下一个节点的next,还有一个指向随机节点或者NULL的random指针。链表复制起来,很简单,数据复制,链起来就可以了。而这个复杂链表的random复制起来就不容易了。 在原链表复制过程中,采用复制的新链表的节点链在原节点之后,这样新链表的random就是原链表random->next。转载 2018-04-10 10:05:57 · 548 阅读 · 0 评论 -
数据结构-5-链表面试题
数据结构-5-链表面试题从尾到头打印单链表 删除一个无头单链表的非尾节点(不能遍历链表) 在无头单链表的一个节点前插入一个节点(不能遍历链表) 单链表实现约瑟夫环(JosephCircle) 逆置/反转单链表 单链表排序(冒泡排序&快速排序) 合并两个有序链表,合并后依然有序 查找单链表的中间节点,要求只能遍历一次链表 查找单链表的倒数第k个节点,要求只能遍历一次链表 删转载 2018-04-10 10:05:20 · 556 阅读 · 0 评论 -
数据结构-4-双链表
数据结构-4-双链表在单链表的实现中,我们可以清晰感觉到,要访问链表的尾时必须要遍历链表,这样效率就打了折扣,为了解决这一矛盾,就诞生了双链表。双链表:每一个节点不仅拥有存储数据的数据变量和指向数据的下一个变量的下一个指针变量,而且含有指向数据变量的前一个变量的一个先前指针变量。#includestdio.h>#includeassert.h>#includeWindows.h>ty转载 2018-04-10 10:03:25 · 407 阅读 · 0 评论 -
数据结构3-单链表的实现
数据结构3-单链表的实现顺序表在进行数据操作时,都必须从头开始才能找到所需要的数据,而且顺序表必须一个数接着一个数进行存储,这样当我们对顺序表中的部分数据进行增删查改时候,对于修改数据之后的数据要进行移位。显然,这样的操作时间复杂度比较大。而链表可以看成由结点组成的特殊的顺序表,而所谓结点就是一个数据和该数据的数据的地址组成的。链表不需要按顺序一个接一个的排列,因为链表转载 2018-04-10 10:02:07 · 439 阅读 · 0 评论 -
数据结构2-顺序表
数据结构2-顺序表数据结构2-顺序表顺序表就是一段有序的数组。 静态顺序表:就是顺序表的最大长度是有确定值的。 动态顺序表:相对于静态顺序表,最大长度命名为容量,容量可以在初始化顺序表时候给出,容量可以根据后续需求通过realloc函数进行动态分配改变。举个栗子——–动态顺序表//Seqlist.h#ifndef Seqlist_h_#define转载 2018-04-10 10:01:26 · 591 阅读 · 0 评论 -
数据结构1-时空复杂度
数据结构1-时空复杂度程序设计=算法+数据结构。 算法:解决特点问题的求解步骤的描述,表现为计算机中的有限条指令。 算法具有确定性、可行性、有穷性三个特性。时间复杂度简言之,时间复杂度就估算程序需要执行的次数。 一般求解时间复杂度的计算方法: 1、用常数1取代运行时间中的所有加法常数 2、在修改后的运行函数中,只保留最高项。 3、如果最高阶项系数转载 2018-04-10 10:00:35 · 383 阅读 · 0 评论 -
数据结构之内部排序--排序的基本概念
数据结构之内部排序--排序的基本概念排序有n个记录的序列R1,R2,...,RnR1,R2,...,Rn,其相应的关键字的序列是K1,K2,...,KnK1,K2,...,Kn,相应的下标序列1,2,…,n。通过排序,找出当前的下标序列1,2,…,n的一种排列p1,p2,...,pnp1,p2,...,pn,使得相应的关键字满足如下的非递减(或者非递增)关系:Kp1=Kp2=.转载 2018-03-22 09:50:32 · 323 阅读 · 0 评论 -
java集合(下)——集合框架与算法详解
java集合(下)——集合框架与算法详解框架是指一个类的集,在集中有很多超类和接口,这些超类中实现了很多高级的机制、功能和策略。框架的使用者可以创建子类来实现和扩展超类,而不用来重新创建这些基本的机制。在日常工作中,我们用到的技术基本都是框架,我们去使用那些包,去调用那些函数时都会用到这种框架的思想。在集合(一)中分析完集合的数据结构,今天我们就一起来继续讨论一下集合的框架。转载 2018-04-08 09:37:29 · 544 阅读 · 0 评论 -
java集合(上)——数据结构详解
java集合(上)——数据结构详解当我们要处理一串数据的时候,相比较c++和c中的数组和指针,在Java中我们更为常用的是ArrayList、HashMap等集合数据结构。c语言对指针的支持成就了他的深度,而Java中多种多样的包装类成就了他的广度。在java中,我们一般将List、Map、Set等数据结构通归为集合数据结构,这些类都存在于集合类库中。(一) 集合接口转载 2018-04-08 09:35:24 · 414 阅读 · 0 评论 -
Java数据结构与算法解析(五)——二叉查找树
Java数据结构与算法解析(五)——二叉查找树二叉查找树简介二叉查找树(Binary Search Tree),又被称为二叉搜索树。它是特殊的二叉树:对二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记为key [x]。如果y是x的左子树中的一个结点,则key [y] 在二叉查找树中:(1)若任意节点的左子树不空,则左子树上所转载 2018-03-20 09:05:28 · 161 阅读 · 0 评论 -
Java数据结构与算法解析(四)——树的概述
Java数据结构与算法解析(四)——树的概述树的基本概念树具有以下的特点: (01) 每个节点有零个或多个子节点; (02) 没有父节点的节点称为根节点; (03) 每一个非根节点有且只有一个父节点; (04) 除了根节点外,每个子节点可以分为多个不相交的子树。树的基本术语1.结点的度 结点拥有的子树数称为结点的度。度为0的结转载 2018-03-20 09:05:08 · 108 阅读 · 0 评论 -
线性表、链表的区别
线性表、链表的区别存储类别顺序存储结构单链表存储分配方式用一段连续的存储单元依次存储线性表的数据元素采用链式存储结构,用一组任意的存储单元存放线性表的元素时间性能查找O(1)、插入和删除O(n)查找O(n)、插入和删除O(1)空间性能需要预分配存储空间,分大了转载 2018-03-16 09:02:19 · 267 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList的区别ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。LinkedList使用了循环双向链表数据结构。与基于数组ArrayList相比,这是两种截然不同的实现技术,这也决定了它们将适用于完全不同的工作转载 2018-01-06 09:42:51 · 265 阅读 · 0 评论 -
HashMap和HashTable到底哪不同?
HashMap的哈希表和到底哪不同?HashMap的哈希表和有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。1.时间HashTable产生于JDK 1.1,而H转载 2018-01-06 09:41:15 · 214 阅读 · 0 评论 -
什么是B-Tree
什么是B-TreeB-Tree就是我们常说的B树,一定不要读成B减树,否则就很丢人了。B树这种数据结构常常用于实现数据库索引,因为它的查找效率比较高。磁盘IO与预读磁盘读取依靠的是机械运动,分为寻道时间、旋转延迟、传输时间三个部分,这三个部分耗时相加就是一次磁盘IO的时间,大概9ms左右。这个成本是访问内存的十万倍左右;正是由于磁盘IO是非常昂贵的操作,所以转载 2018-01-06 09:40:48 · 182 阅读 · 0 评论 -
HashMap详解
HashMap详解本文讲解HashMap相关内容,如果您正在学习数据结构相关知识,可以在公众号内回复“数据结构”下载相关视频学习,所有视频仅供学习交流使用。JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。简介Java为数据结构中的映射定义了一个接口java.util.Map转载 2018-01-06 09:40:13 · 215 阅读 · 0 评论 -
数据结构之归并排序
数据结构之归并排序介绍归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去转载 2018-01-06 09:39:54 · 233 阅读 · 0 评论 -
数据结构之希尔排序
数据结构之希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。实现:转载 2018-01-05 10:49:43 · 255 阅读 · 0 评论 -
数据结构之插入排序
数据结构之插入排序插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。 插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数。转载 2018-01-05 10:48:55 · 231 阅读 · 0 评论 -
数据结构之选择排序
数据结构之选择排序基本方法:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处,第二次找到第二小的值。具体是如何实现呢? 第一轮是0索引上的数据依次跟后面各个索引上的数据进行比较,直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,接着这个替换掉的数据继续跟它原来的索引位置的后面的索转载 2018-01-05 10:47:59 · 219 阅读 · 0 评论 -
数据结构之冒泡排序
数据结构之冒泡排序基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 第一次比较排序的结果:会把其中最大的数据排到最大的索引处转载 2018-01-05 10:46:46 · 300 阅读 · 0 评论 -
链表的底层实现方式
链表的底层实现方式链表在我们日常的开发过程中应该说是非常常见,做移动开发的更可以说是每天都在接触。比如MessageQueue,底层就是单链链表,各种网络框架用到的队列,底层用到的都是链表。而说到链表,就不得不提到另外一种数据结——集合。相信有一句话大家都听书过:集合更适合查询操作,链表更适合频繁的插入,删除操作。这究竟是为什么呢?今天我就从理论和代码的角度分析一下其中的原因。转载 2018-03-16 09:09:33 · 1002 阅读 · 0 评论 -
数据结构——简介
数据结构——简介数据结构——简介1、几个基本概念数据:数据是指计算机接受的输入数据,比如:整型、浮点型等数值类型以及声音、图像、视频等非数值类型的数据数据元素:是组成数据有一定意义的基本单位,比如一个人的基本信息包括姓名、性别、年龄等数据对象:是性质相同的数据元素的集合,比如正整数数据对象N={1,2,3……}数据结构:是数据的组织形式,即数据元素之转载 2018-03-17 08:58:46 · 129 阅读 · 0 评论 -
B树索引+B树索引逻辑结构图+B树索引是怎么搜索数据+创建B树索引
B树索引+B树索引逻辑结构图+B树索引是怎么搜索数据+创建B树索引B树索引 1创建索引不指定unique ,btimap 那么表示创建的索引是B树索引. 2B树索引的组织结构类似一颗树,主要数据集中在叶子节点上,叶子节点包含索引列的值和记录行对应的物理地址rowid; 3默认会为主键创建一个B树索引 4无法给包含索引的创建索引.B树索引逻辑结构图 B转载 2018-03-18 09:08:59 · 377 阅读 · 0 评论 -
Java数据结构与算法解析(一)——表
Java数据结构与算法解析(一)——表本节我们讨论常见常用的数据结构——表。 如果要通俗简单的说什么是表,那我们可以这样说:按顺序排好的元素集合就是表。表的概述抽象数据类型是带有一组操作的一些对象的结合1、定义: 线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终转载 2018-03-13 09:19:25 · 185 阅读 · 0 评论