数据结构
小码农叔叔
这个作者很懒,什么都没留下…
展开
-
java操作二叉树
下面聊聊二叉树的使用,二叉树的基本理论想必大家都很明白了,直接上代码,1、首先是一个节点Node,这个节点有下面几个属性,数据项,以及对左右子节点的引用,public class Node { // 数据项 public long data; private String sData; // 左子节点 public Node leftChild; // 右子节点 publi...原创 2019-01-22 23:08:54 · 2185 阅读 · 0 评论 -
java计数排序
什么是计数排序呢?简单来说,就是通过额外开辟一个数组或者类似的集合空间,将原数组待排序元素进行整理放到这个新开辟的数组中,最后,再将这个数组排序好的元素重新填充到原数组中,可以看出来,这个计数排序是需要额外消耗空间的。计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数(局限性)。计数排序算法Java...原创 2019-03-17 23:09:41 · 7109 阅读 · 0 评论 -
java基数排序
我们回想一下我们小时候是怎么学习比较数字大小的?我们是先比位数,如果一个位数比另一个位数多,那这个数肯定更大。如果位数同样多,就按位数递减依次往下进行比较,哪个数在这一位上更大那就停止比较,得出这个在这个位上数更大的数字整体更大的结论。当然我们也可以从最小的位开始比较,这其实就对应了基数排序里的MSD(mostsignificant digital)和LSD(least significant...原创 2019-03-19 19:10:08 · 7109 阅读 · 0 评论 -
java模拟双向链表实现
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点下图是双向链表的逻辑结构图,和单链表不同的是,双向链表中每个节点包含两个节点的指针引用,和一个数据域,这两个节点分别指向前一个节点和后一个节点;双向链表的这种结构比起单链表,其改进之处正在于此,通过对前后节点的引用可以使得在...原创 2019-03-10 20:11:17 · 6340 阅读 · 6 评论 -
java堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序的过程描述如下:将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn)...原创 2019-03-14 22:39:44 · 1948 阅读 · 0 评论 -
java归并排序
和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有...原创 2019-02-22 23:54:25 · 7407 阅读 · 1 评论 -
java优先级队列使用
优先级队列是比栈和队列更专用的结构,在多数情况下都非常有用。优先级队列像普通队列一样,有一个队头和队尾,并且也是从队头移除数据。优先级队列中,数据按关键词有序排列,插入新数据的时候,会自动插入到合适的位置保证队列有序。举个例子来说,一组整型数,如果使用优先级队列的话,不管队列之前放入的数据如何,后面添加进去的数据总会被按照升序或者降序排列,当然这个只是优先级队列最基本的使用,在实际生产中可能有...原创 2019-02-21 21:40:11 · 9512 阅读 · 0 评论 -
阻塞和非阻塞队列下两种生产者消费者实现
队列可分为两种,一种是阻塞队列,一种是非阻塞队列。阻塞队列和非阻塞队列的区别:阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送。而阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候,会阻塞,直到队列不为空。自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:Arr...原创 2019-02-21 20:52:38 · 21385 阅读 · 0 评论 -
java实现单词或字符串反转
最近抽空研究java数据结构发现栈和队列的特殊用处,比如像实现单词或字符串反转这一个功能,传统的做法是,将单词切分成一个个字符,然后重新组装成一个新的单词,如果用栈来实现是不是也可以做呢?思考一下栈的结构可以知道,栈是先进后出的数据结构,我们设想将单词切成一个个字符后入栈,取出来的时候不就是最后放入的那个字符吗?利用这一思路来实现一下上述的猜想,其实代码实现并不难,下面直接贴上两种实现方式的代码...原创 2019-02-21 19:44:53 · 3066 阅读 · 1 评论 -
java多叉树的遍历
用过了二叉树后,正好业务上有一个需求,就是需要求出从根节点到每个叶子节点的路径集合,由于不是二叉树,而是如同一种多叉树的结构,下面来看具体代码,1、节点对象,包含3个属性,当前节点Id,持有的父节点Id,当前节点的内容,public class TreeNode { /** 节点Id */ private String nodeId; /** 父节点Id */ private Str...原创 2019-01-23 08:54:26 · 8143 阅读 · 0 评论 -
二叉树基本使用
什么是二叉树?在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。为什么要学习二叉树?在树中查找数据项的速度和在有序数组中查找一样快,并且插入数据项和删除数据项的速度和在链表中一样快。二叉树结合了数组与链表结构的优点,成为了更加快速的高级数据结构。下面...原创 2019-03-24 22:00:51 · 3519 阅读 · 0 评论