随笔分类 - 数据结构
摘要:一,一些定义 树的深度定义:对于树中的节点n(i),n(i)的深度定义为,从根到n(i)的唯一路径的长度。 树的高度定义:对于树中的节点n(i),n(i)的高度定义为,从n(i)到树中叶子节点的最长路径的长度。因为树中可能有多个叶子结点,n(i)到每个叶子结点都会有路径,路径最长的即为n(i)的高度
阅读全文
摘要:整体思路:二叉查找树是一棵树,对于树,需要把节点表示出来。由于节点仅仅在树的内部使用,故采用内部类的形式实现。 树作为一种ADT,需要属性及在其上进行的操作。由于大部分树的操作都是从根节点开始的,因此需要一个根节点属性,并可根据自己的需求来确定需要实现哪些操作。 对于二叉查找树,它不是一般的二叉树,
阅读全文
摘要:1,Hashing过程 像二分查找、AVL树查找,这些查找算法的时间复杂度为O(logn),而对于哈希表而言,我们一般说它的查找时间复杂度为O(1)。那它是怎么实现的呢?这就是一个Hashing过程。 在JAVA中,每个对象都有一个散列码,它是由Object类的hashCode()方法计算得到的(当
阅读全文
摘要:1,堆作为优先级队列的应用 对于普通队列而言,具有的性质为FIFO,只要实现在队头删除元素,在队尾插入元素即可。因此,这种队列的优先级可视为按 时间到达 的顺序来衡量优先级的。到达得越早,优先级越高,就优先出队列被调度。 更一般地,元素 不能单纯地按时间到来的先后来分优先级(或者说插入的顺序),在这
阅读全文
摘要:1,导论什么是数据结构?A data structure is an aggregation of data components that together constitute a meaningful whole。在计算机领域中,技术千变万化,但是基本的数据结构始终只有那几种。而抽象数据类型(...
阅读全文
摘要:在上一篇文章中记录了如何实现图的邻接表。本文借助上一篇文章实现的邻接表来表示一个有向无环图。 1,概述 图的实现与邻接表的实现最大的不同就是,图的实现需要定义一个数据结构来存储所有的顶点以及能够对图进行什么操作,而邻接表的实现重点关注的图中顶点的实现,即怎么定义JAVA类来表示顶点,以及能够对顶点进
阅读全文
摘要:1,摘要: 本系列文章主要学习如何使用JAVA语言以邻接表的方式实现了数据结构 图(Graph),这是第一篇文章,学习如何用JAVA来表示图的顶点。从数据的表示方法来说,有二种表示图的方式:一种是邻接矩阵,其实是一个二维数组;一种是邻接表,其实是一个顶点表,每个顶点又拥有一个边列表。下图是图的邻接表
阅读全文
摘要:1,中缀表达式的定义及为什么要将中缀表达式转换为后缀表达式?中缀表达式(中缀记法)中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通...
阅读全文
摘要:1,括号匹配是指在某个字符串中,左括号出现的顺序及个数与右括号保持一致。如:{ [ ( ) ] } ----匹配 { [ ] } ----匹配 { ( } ) ---不匹配①{ [ ( ) ] -----不匹配② { [ ] } ) ----不匹配③不匹配一共有如上三种情况:①左右对应的括号不匹配...
阅读全文
摘要:1,AVL树又称平衡二叉树,它首先是一颗二叉查找树,但在二叉查找树中,某个结点的左右子树高度之差的绝对值可能会超过1,称之为不平衡。而在平衡二叉树中,任何结点的左右子树高度之差的绝对值会小于等于 1。 2,为什么需要AVL树呢?在二叉查找树中最坏情况下查找某个元素的时间复杂度为O(n),而AVL树能
阅读全文
摘要:1,堆是什么?堆的逻辑结构是一颗完全二叉树,但物理结构是顺序表(一维数组)。同时,此处的堆不要与JAVA内存分配中的堆内存混淆。这里讨论的是数据结构中的堆。参考:计算机中的堆是什么?2,数组实现堆的优势及特点由于堆从逻辑上看是一颗完全二叉树,因此可以按照层序遍历的顺序将元素放入一维数组中。注意为了方...
阅读全文
摘要:1,实现思路public class HashedDictionary implements DictionaryInterface, Serializable {定义HashedDictionary.java,作为Hash词典的实现,该词典实现了如下功能:①向词典中添加元素 ,②根据...
阅读全文
摘要:1,什么是散列?举个例子,在日常生活中,你将日常用品都放在固定的位置,当你下次需要该东西时,直接去该地方取它。这个过程就相当于散列查找。若将它们随意杂乱无章地存放,当需要某件东西时,只能一个地方一个地方地逐一查找,这就相当于顺序查找。在数据结构中,数组就相当于一张散列表,因为可以根据数组下标索引直接...
阅读全文
摘要:1,在词典的实现(2)-借助顺序表(数组)实现词典文章中使用了自定义的数组代替ArrayList,并实现了Map数据结构的基本功能。而借助JAVA类库ArrayList类的一些方法可以更加容易地实现Map。2,实现思路如下ArrayListDictionary.java 中定义了一个ArrayLis...
阅读全文
摘要:一,思路1,词典实现类ArrayDictionary.java肯定要implements 词典的接口DictionaryInterface.java(参考:http://www.cnblogs.com/hapjin/p/4573826.html)。其次,为了序列化,还要implements Seri...
阅读全文
摘要:1,本程序实现了线性表的链式存储结构。实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点。 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾指针直接找到链表的最后一个元素,从而不需要遍历链表就可以完成插入操作。 2,具体实现链表的类名为LL
阅读全文
摘要:本程序采用JAVA语言实现了线性表的链式实现。首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现。本实现中,链表是不带表头结点的,且有一个指针始终指向链表中的第一个元素,并没有定义尾指针。因此,每次向链表中插入新结点时需要遍历链表一次。...
阅读全文
摘要:1,对于线性表而言,里面的元素是无序的,可以随意地将新元素增加到线性表中而不需要考虑该元素在线性表中的位置。但是,对于有序表而言,其中的元素是按照某种方式进行排序的,因此在有序表中插入元素时,需要按照顺序将该新元素放置到有序表的合适的位置。但由于有序表与线性表有很多相似的地方,因此,下面通过继承线性...
阅读全文
摘要:参考《算法导论第二版P222页)一,如何把现实的问题转变成数学问题?即数学建模的思路?1,问题描述:现有一组相互竞争的活动,如何调度能够找出一组最大的活动(活动数目最多)使得它们相互兼容?2,问题转化:首先,按活动的结束时间单调递增进行排序。那么,为什么要按结束时间排序呢?这个问题留到后面解释。其次...
阅读全文