【数据结构】位图 位图,就是用每一位存放某种状态,适用于数据较多,且状态不多的情况。在Linux系统中,用位图来表示是否接收到进程发送的信号,接收到信号则将相关的比特位置1。可以想到,一个数据要么存在,要么不存在,只有两种状态,因此,我们不妨使用比特位来存储这些数,存在的置为1,不存在的置为0。位图的主要操作都有:置1操作恢复为0检测一个数是0还是1位图中1的个数位图中的总位数下面来看一下位图的具体实现:运行结果:
【数据结构】并查集 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集是一种树型的数据结构,用于处理一些不想交的集合的合并及查询问题。
【数据结构】排序算法——选择排序和堆排序 堆排序1.基本思想堆排序是指利用堆这种数据结构所进行的排序,利用数组的特点快速定位指定索引的元素。利用堆进行排序,比较的次数和交换的次数均比冒泡排序或选择排序少,性能较高。
【数据结构】堆 移除堆顶元素后,用堆的最后一个结点填补堆顶元素,并将元素个数减一,在对堆进行自上而下的调整。在一堆数据中找最大的前K个:先将前K个数据按照小堆进行创建,在依次遍历要查找的数据,如果该数据大于堆顶元素,则用它替换堆顶元素,并将堆调整,这样最终就可以得到最大的K个元素。
【数据结构】哈希桶 在上一篇博客中,我们简单地介绍了哈希表,以及解决哈希冲突的办法;今天我们介绍解决哈希冲突的另一种方法——开散列法。说起来可能很复杂,其实很简单,看一个图就明白了:假设哈希函数为Hash=key%10假如哈希函数被破解了,可能会对哈希桶进行攻击,从而将哈希桶退化成单链表,此时查找效率将会大大降低,我们可以把单链表换成红黑树,提高查找效率。当哈希桶的个数与插入的结点个数相等时,我们就增加容量。
【数据结构】哈希 我们经常会在一堆数据中搜索我们需要的数据元素,用于搜索的数据集合称为搜索结构。我们知道在数据结构中搜索一个元素需要进行一系列的关键码比较,因此搜索的效率取决于搜索过程中比较的次数。对于两个数据元素的关键字,可能通过函数计算出一个相同的值,将这种现象称为哈希冲突或哈希碰撞。
【数据结构】对B树的认识 如果使用红黑树的结构,当然也可以达到目的,但这样的缺点是数据量大,树的高度太高,访问磁盘的次数增加,从而效率低下。B+树的特性:1.所有的关键字都出现在非叶子结点的链表中,且链表中的关键字恰好是有序的2.不可能在飞叶子结点命中3.非叶子结点相当于是叶子结点的索引,叶子结点相当于是存储数据的数据层4.更适合文件索引系统、下面是B树具体的结构及插入操作,在此我将M默认设置为3,也可以修改为其他的值
【数据结构】有向图 二.有向图的存储数据结构首先定义有向图的API接口,DiGraph本质上和Graph是一样的。有向图的模型很好的可以应用在JVM内存管理上面。对于有向环的检测主要有两种方法:DSF和拓扑排序。有向无环图就是一幅不包含环的有向图。
【数据结构】Java语言描述-循环链表和双向链表操作 算法中常常会涉及循环链表和双向链表这些特殊的链表,对于循环链表来说,从表中任意节点出发均可以找到其他节点,对于循环链表来说唯一的区别是循环结束的条件改为是否指向头指针。本文介绍循环链表和双向链表的一些常用操作的Java实现。
【数据结构】Java语言描述-单链表的基本操作 单链表是数据结构中以动态结构存储的线性结构,在Java语言中,一般用本类对象引用的方式在内存中将一组相同类型的对象存储,熟悉单链表的基本操作有助于灵活解决此类算法问题。