java数据结构和算法
灰太狼_cxh
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。
展开
-
希尔排序(java实现)
希尔排序基于插入排序,比选择排序和插入排序这种复杂度为0(n^2)的效率快,比快速排序和其他排序复杂度为(n*logN)的慢,但非常容易实现,代码既短又简单,希尔排序在最坏情况和在平均情况下执行效率相差不大。希尔排序用java实现package sort;import java.util.Random;/** * 希尔排序 * @author 灰太狼 * *原创 2018-01-31 20:58:26 · 372 阅读 · 0 评论 -
有序链表的基本用法
有序链表:链表本身是一种无序的数据结构,元素的插入和删除不能保证顺序性,但是有没有有序的链表呢?答案是肯定的,我们在单链表中插入元素时,只需要将插入的元素与头结点及其后面的结点比较,从而找到合适的位置插入即可。一般在大多数需要使用有序数组的场合也可以使用有序链表,有序链表在插入时因为不需要移动元素,因此插入速度比数组快很多,另外链表可以扩展到全部有效的使用内存,而数组只能局限于一个固定的大小中。...原创 2018-07-30 23:25:29 · 11036 阅读 · 3 评论 -
双端链表的基本操作(2):双端链表实现队列
我们知道,队列是一种“先进先出”的数据结构,队列的插入操作是在队尾进行的,而删除操作是在队头进行的,这与在双端链表的表尾插入和在表头删除操作是类似的,因此可以用双端链表实现队列。 双端链表实现队列的Java代码:package parking;import java.util.Collection;import java.util.Iterator;import j...原创 2018-07-29 18:15:49 · 1086 阅读 · 0 评论 -
双端链表的基本操作
双端链表:双端链表和单向链表大体上是一样的,不同的是,单向链表在表尾部分插入元素时,需要从头结点一直遍历到尾结点才能进行插入操作,这样难免有些繁琐。因此如果加入一个对尾结点的引用,这样就可以很方便地在尾结点进行插入操作,这就是双端链表。除了有一个头结点(head),还有一个尾结点(tail)。注意它和双向链表的区别! 双端链表的Java代码实现:package parking;...原创 2018-07-29 17:51:22 · 425 阅读 · 0 评论 -
单链表的基本操作(3):单链表实现栈
我们知道,栈是一种“后进先出”的数据结构,对栈的插入和删除操作都是在栈头位置进行的,这与在单链表的表头插入和删除元素的原理类似,因此可以用单向链表实现栈。 单链表实现栈的Java代码:package parking;import java.util.Stack;class Node { Object data; Node next; public Node(Objec...原创 2018-07-29 12:55:17 · 2317 阅读 · 0 评论 -
单链表的基本操作(2)
package parking;import java.util.Stack;/** * 链表 * * @author ASUS * */class Node { Object data;// 链表的值 Node next;// 指向链表的下一个结点 Node(Object data) { this.data = data; }}public clas...原创 2018-07-29 12:12:47 · 187 阅读 · 0 评论 -
详解红黑树
红-黑树特征1.节点都有颜色2.在插入和删除的过程中,要遵循保存这些颜色不同排列的规则。带颜色的节点在红-黑树中,每一个节点或者是黑色的或者是红色的。当然也可以是任意的两种颜色;红-黑规则当插入或者删除一个新节点时,必须遵循一定的规则。它们被称为红-黑规则。遵循这些规则,树就是平衡的。这些规则是:每一个节点不是红色的就是黑色的。根总是黑色的如果节点是红色的,则它原创 2018-02-06 21:02:16 · 238 阅读 · 0 评论 -
二叉搜索树
二叉搜索树的特征定义就是:一个节点的左子节点的关键字值小于这个节点,右子节点的关键字大于或等于这个父节点package Trees;import java.util.Scanner;import java.util.Stack;/** * 二叉搜索树 * @author 灰太狼 * */class Node{ public int原创 2018-02-06 20:52:52 · 147 阅读 · 0 评论 -
快速排序(java实现)
在大多数情况下,快速排序都是最快的,时间复杂度为0(n*logN)级。快速排序算法本质上就是把数组划分为2个子数组,然后递归地调用自身为每一个子数组进行快速排序来实现的。package sort;import java.util.Random;/** * 快速排序 * @author 灰太狼 * */class ArrayIns{原创 2018-02-01 21:18:27 · 164 阅读 · 0 评论 -
单链表的基本操作
class Link{ public int iData; public double dData; public Link next;//指向下一个数据指针 public Link(int id,double dd) { iData=id; dData=dd; } public原创 2018-01-24 21:15:27 · 256 阅读 · 0 评论 -
双向链表的基本用法
双向链表:双向链表的每个结点既能指向下一个结点,又能指向前一个结点,双向链表既能从头结点向尾结点遍历,又能从尾结点向头结点遍历,既有一个头结点,又有一个尾结点。package parking;class Node{ Object data; Node pre; Node next; public Node(Object obj) { this.data=obj; ...原创 2018-08-05 23:56:09 · 494 阅读 · 1 评论