
数据结构(java)
数据结构对于一个程序员来说是必备的基础。这是我在大二时用java实现的基本数据结构,现在对它加以一些修改和完善后贴到网上来。源码:https://github.com/luoweifu/DataStructure.git
陌尘(MoChen)
程序员码龄: 14+年
IT从业经验: 10+年
曾任职单位: 北大方正,阿里巴巴
出版的书籍: 《人人都懂设计模式》、《Python 設計模式》
擅长的语言: C++/Python/JavaScript
涉及的技术: 电子书SDK,PC户端开发,Linux应用开发,前端开发
涉及的行业: 电子出版,在线教育,文档协调,智能机器人
展开
-
开放《数据结构》专栏的代码
之前写的《数据结构》系列博客,虽然已经贴出了主要部分的代码,但还是经常有人问我要代码,我就直接把它开源得了,把代码托管在github上:https://github.com/luoweifu/DataStructure.git欢迎对这方面有兴趣的人一改进和完善这个项目。原创 2015-07-05 22:46:48 · 3449 阅读 · 0 评论 -
排序
直接插入排序排序过程整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序算法描述折半插入排序排序过程用折半查找方法确定插入位置的排序叫折半插入排序.算法描述算法评价时间复杂度:T(n)=O(n²)空间复杂度:S(n)=O(1)原创 2013-07-08 16:22:43 · 3757 阅读 · 1 评论 -
查找
查找概述l 查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素l 关键字——是数据元素中某个数据项的值,它可以标识一个数据元素l 查找方法评价u 查找速度u 占用存储空间多少u 算法本身复杂程度u 平均查找长度ASL(Average Search Length):为确定记录在表中的位置,需和给定值进行比较的关原创 2013-07-08 15:59:01 · 3050 阅读 · 0 评论 -
图(3)——邻接链表法
邻接链表法基本思想:对图的每个顶点建立一个单链表,存储该顶点所有邻接顶点及其相关信息。每一个单链表设一个表头结点。第i个单链表表示依附于顶点Vi的边(对有向图是以顶点Vi为头或尾的弧)。1结点结构与邻接链表示例链表中的结点称为表结点,每个结点由三个域组成,如图(a)所示。其中邻接点域(adjvex)指示与顶点Vi邻接的顶点在图中的位置(顶点编号),链域(nextar原创 2013-07-08 13:33:32 · 30330 阅读 · 2 评论 -
图(2)—— 邻接矩阵表示法
图的存储结构图的存储结构比较复杂,其复杂性主要表现在: ◆ 任意顶点之间可能存在联系,无法以数据元素在存储区中的物理位置来表示元素之间的关系。 ◆ 图中顶点的度不一样,有的可能相差很大,若按度数最大的顶点设计结构,则会浪费很多存储单元,反之按每个顶点自己的度设计不同的结构,又会影响操作。图的常用的存储结构有:邻接矩阵、邻接链表、十字链表、邻接多重表和边表,其中邻接矩原创 2013-07-08 13:02:45 · 26429 阅读 · 2 评论 -
图(1)——图的定义和基本概念
概述图(Graph)是一种比线性表和树更为复杂的数据结构。线性结构:是研究数据元素之间的一对一关系。在这种结构中,除第一个和最后一个元素外,任何一个元素都有唯一的一个直接前驱和直接后继。 树结构:是研究数据元素之间的一对多的关系。在这种结构中,每个元素对下(层)可以有0个或多个元素相联系,对上(层)只有唯一的一个元素相关,数据元素之间有明显的层次关系。图结构:是研究原创 2013-07-08 12:06:14 · 17700 阅读 · 3 评论 -
二叉树(3)——三叉链表示的二叉树
三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点、右孩子结点、父亲结点【三叉】的引用(指针)数据和数据组成。package datastructure.tree.btree;/** * 三叉链表示的二叉树定义 * @author Administrator * */public class BinTreeNode{ private Object data; /原创 2013-06-13 20:38:28 · 4267 阅读 · 1 评论 -
二叉树(2)——遍历的非递归实现
算法概述递归算法简洁明了、可读性好,但与非递归算法相比要消耗更多的时间和存储空间。为提高效率,我们可采用一种非递归的二叉树遍历算法。非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似。对于中序遍历来说,非递归的算法比递归算法的效率要高的多。其中序遍历算法的实现的过程如下:(1).初始化栈,根结点进栈;(2).若栈非空,则栈顶结点的左孩子结点相继进栈,直到null(到叶原创 2013-06-12 17:10:34 · 3041 阅读 · 0 评论 -
二叉树(1)——二叉树的定义和递归实现
定义最多有两棵子树的有序树,称为二叉树。二叉树是一种特殊的树。递归定义:二叉树是n(n>=0)个有限结点构成的集合。N=0称为空二叉树;n>0的二叉树由一个根结点和两互不相交的,分别称为左子树和右子树的二叉树构成。二叉树中任何结点的第1个子树称为其左子树,左子树的根称为该结点的左孩子;二叉树中任何结点的第2个子树称为其右子树,左子树的根称为该结点的右孩子。如下图是一个二叉树:原创 2013-06-11 23:27:11 · 14895 阅读 · 5 评论 -
树
树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件: (1)有且仅有一个特定的称为根(Root)的结点; (2)当n>1时,其余结点可以划分为m(m>0)个互不相交的有限集T1、T2 、…、Tm,每个集Ti(1≤i≤m)均为树,且称为树T的子树(SubTree)。 特别地,不含任何结点(即n=0)的树,称为空树。原创 2013-06-10 16:57:44 · 5512 阅读 · 5 评论 -
集合
集合的定义集合在数学中的定义如下:集合是具有某种相同数据类型的数据元素,或是一些确认对象的汇集。通常用大写英文字母 A,B,C,… 表示,它的元素通常用小写英文字母 a,b,c,… 表示.集合可以没有元素,这样的集合叫做空集,用 或符号 表示。如果集合含有有限个元素,那么这个集合可以称为有限集。如果集合含有无限个元素,那么这个集合可以称为无限集。集合的特性无序性:一个集原创 2013-03-10 13:35:25 · 4019 阅读 · 0 评论 -
串操作
概述字符串的应用已经非常广泛,如信息检索、文字编辑、自然语言的翻译等都离不开字符串。在各种高级语言的程序设计中都会有字符串类型,虽然各种语言的表现方式各自不同,但其实现原理基本相同。熟悉java语言的人定会感受到String类的强大和实用性,但是其是如何实现的呢?这就是下面所要讲的内容。从逻辑关系上来看,串是一各特殊的线性表。它与一般线性表的区别是:一般线性表的操作通常以表内的数据元素原创 2013-03-06 22:51:12 · 4781 阅读 · 0 评论 -
递归算法
概述程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。递归有直接递归和间接递归•直接递归:函数在执行过程中调用本身。•间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。•表达方式:•递归算法有四个特性:(1)必须有可最终达到的终止条件,否则程序将陷入无穷循环;(2)子问题在规模上比原问题原创 2013-01-16 16:20:24 · 51163 阅读 · 6 评论 -
(堆)栈
(堆)栈概述栈是一种特殊的线性表,是操作受限的线性表栈的定义和特点•定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈•特点:先进后出(FILO)或后进先出(LIFO)栈的结构如下图所示:线性表的操作主要包括:(1)清空(堆)栈(2)判断是否为空(3)元素原创 2013-01-16 08:47:51 · 3591 阅读 · 0 评论 -
队列
队列概述队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。–队尾(rear)——允许插入的一端–队头(front)——允许删除的一端队列特点:先进先出(FIFO)队列的结构如下图所示:线性表的操作主要包括:原创 2013-01-16 08:12:28 · 21005 阅读 · 9 评论 -
线性表
线性表概述线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。线性表分为静态线性表和动态线性表,常见的有顺序表(静态的)、单向链表(动态的)和双向链表(动态的)。线性表的操作主要包括:(1)计算表的长度n。(2)线性表是否为空(3)将元素添加到线性表的末尾(4)获取原创 2013-01-15 14:08:46 · 12436 阅读 · 17 评论 -
数据结构
这是我在大二时用java实现的基本数据结构,现在对它加以一些修改和完善后贴到网上来。虽然在网上关于数据结构的文章和代码比比皆是,但别人写出来的跟自己写出来的还是有些不一样。这一来是在网上做个备份,也许以后还能用得上;二来也算是自己再温习一次,毕竟这是一个程序员必备的基础。对大鸟来说,这些都是烂熟于心了;但对于小菜来说,也许还有一些参考价值! 数据结构:是相互之间存在一种或多种特原创 2013-01-14 22:18:35 · 4893 阅读 · 1 评论