数据结构
文章平均质量分 85
hjy逸影
这个作者很懒,什么都没留下…
展开
-
基于数组的词典
基于数组的词典词典(Dictionary),也称映射(map),词典中每个元素都由两部分组成:一个关键字,通常称为查找键(search key);一个与该键值相关联的值,一般将它们称之为键值对。每一个查找建在词典中是唯一的,即不存在两个相同的查找建,这样就可以通过查找建来访问其对应的值。基于数组实现的词典中的每个元素必须是Entry类的一个实例,即键值对封装在一个对象中,如原创 2017-03-17 15:44:21 · 443 阅读 · 0 评论 -
对分查找算法(迭代和递归方式)
对分查找算法(迭代和递归方式)二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标。迭代方式 public static int binarysearch(int[] srcArray, int des){ int low = 0; int high = srcArray.length-原创 2017-03-16 10:46:22 · 2397 阅读 · 0 评论 -
平衡查找树
平衡二叉查找树平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的高度差不超过1。二叉查找树的平衡只有在插入或者删除结点时才会被扰乱,因此,在这些操作过程中,AVL树需要重新排列结点以维持平衡。平衡结点:如果结点是一棵平衡树的根,即该结点的两棵子树高度之差不超过1,原创 2017-03-24 20:33:35 · 543 阅读 · 0 评论 -
排序算法总结
排序算法总结概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较原创 2017-03-11 17:19:11 · 635 阅读 · 0 评论 -
数据结构—堆
数据结构—堆堆是一棵完全二叉树,其结点含有Comparable的对象。堆又分为最大堆和最小堆:最大堆:每个结点的对象都大于等于它的子孙结点的对象最小堆:每个结点的对象都小于等于它的子孙结点的对象在本文章只讨论最大堆以及其实现。如果一棵树是完全二叉树,则可以使用数组来表示完全二叉树。下图的完全二叉树是一个最大堆,使用数组的形式来实现最大堆:将完全二叉树的层序遍原创 2017-03-23 10:14:31 · 420 阅读 · 0 评论 -
二叉查找树
二叉查找树树的基本知识可查看:http://blog.csdn.net/hjy132/article/details/64127018二叉查找树是一棵二叉树,其结点含有Comparable的对象,并以如下方式组织。对于树的每一个结点:结点中的数据大于结点的左子树中的数据结点中的数据小于结点的右子树中的数据二叉查找树的性质:对二叉查找树进行中序遍历,即可得到有序的数列。二原创 2017-03-21 20:55:49 · 919 阅读 · 0 评论 -
数据结构—树
数据结构—树树树 由显示结点间关系的边相联而成的结点集合。如下图树的根与任意其他结点之间的路径是唯一的。树的高度是树中层的数目,该高度也等于根与叶子间最长路径上的结点数目。上图是一棵三叉树,因为A有3个孩子,而二叉树的每个结点至多有两个孩子,分别称为左孩子和右孩子。二叉树二叉树分为满二叉树、完全二叉树、不满也不完全的二叉树。满二叉树:每个非叶结点都有原创 2017-03-20 22:22:33 · 691 阅读 · 2 评论 -
插入排序
插入排序插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。插入排序不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。相信大家都有过打扑克牌的经历,特别是牌数较大的。在分牌时可能要整理自己的牌,牌多的时候怎么整原创 2017-03-07 10:50:28 · 865 阅读 · 0 评论 -
选择排序
选择排序选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。简单地说,从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。写成Comparable,而不是Comparable,就可以对任意类型使用Comparable。public class S原创 2017-03-07 10:14:44 · 259 阅读 · 0 评论 -
队列、双端队列与优先队列
队列、双端队列与优先队列队列:先进先出,从后面插入,从前面移除;处理类似排队的问题,先排先处理,插入和移除操作的时间复杂度都为O(1)。双端队列:即在队列两端都可以插入和删除。同时拥有栈和队列的功能,一般使用频率较低,时间复杂度 O(1)。优先级队列:内部维护一个按优先级排序的序列。插入时需要比较查找插入的位置,时间复杂度O(N), 删除O(1)。原创 2017-03-20 14:12:22 · 3219 阅读 · 0 评论 -
用链表实现线性表
用链表实现线性表正如上一篇看到,使用数组实现ADT线性表既有优点也有优点。数组的长度可以是固定的,也可以动态扩展数组,但每次动态扩展数组时,都需要移动数据。不管是定长的数组还是可扩展的动态数组,在需要为新元素腾出空间或者弥合删除后留下的间隙时,都要求移动数据。而基于链表实现的线性表可以避免移动数据,并且在插入和删除操作上需要更少的开销,反而查找速率降低了。原创 2017-03-06 15:22:46 · 1187 阅读 · 0 评论 -
用数组实现线性表
用数组实现线性表现在开始进入数据结构的复习!数据结构中最简单的结构就是线性表,线性表又分为多种类型,这篇文章讲的是基于数组实现的线性表,说明了就是自己来实现ArrayList集合,ArrayList采用的数据结构是数组,存储的元素有序但不唯一,查找效率高,但是增删没有LinkedList的效率高。 通过这篇文章你可以知道ArrayList的基本工作方式。设计ADT数据结构实际上就是原创 2017-03-06 11:25:08 · 929 阅读 · 0 评论 -
Java栈的实现
Java栈的实现栈 是限制仅在表的一端进行插入和删除运算的线性表。插入或删除的一端为栈顶,另一端称为栈底当表中没有元素时为空栈栈为后进先出的线性表,又称LIFO表栈没有查找操作,查看非栈顶元素的唯一方式是反复从栈中删除元素,直到想要的元素位于栈顶。栈的操作:push(newEntry):将新元素插入栈顶pop():删除栈顶元素并返回值peek:返回栈顶元素但原创 2017-03-19 20:55:58 · 887 阅读 · 0 评论 -
散列表
散列表散列(hashing)是一种无需查找,只用元素的查找键确定元素索引的方法,即通过访问key而直接访问存储的value值。数组本身就是一个散列表。在key - value之间存在一个映射函数(散列函数),该函数加快了查找的速度。散列方法不同于顺序查找、二分查找、二叉排序树查找,它不以关键字的比较为基本操作,采用直接寻址技术 (直接通过key映射到内存地址上)。在理想情况下,无须任何比较原创 2017-03-19 11:17:43 · 1043 阅读 · 0 评论 -
基于链表的词典
基于链表的词典词典(Dictionary),也称映射(map),词典中每个元素都由两部分组成:一个关键字,通常称为查找键(search key);一个与该键值相关联的值,一般将它们称之为键值对。每一个查找键在词典中是唯一的,即不存在两个相同的查找键,这样就可以通过查找建来访问其对应的值。就像上一篇基于数组的词典,每个元素可以是Entry类的一个实例,即键值对封装在一个对象中原创 2017-03-17 18:11:34 · 763 阅读 · 0 评论 -
有序链表
有序链表有序链表:插入的元素呈有序状态,删除链头时,就删除最小(或最大)的值,插入时,需要从链头开始搜寻插入的位置。插入的时间复杂度O(n),平均O(n/2),删除最小(或最大值)的时间复杂度O(1)。适用场所:适用于需要存取(插入/查找/删除)最小(或最大)数据项的应用。有序链表接口public interface SortedListInterf原创 2017-03-17 10:38:41 · 553 阅读 · 0 评论