Java数据结构
文章平均质量分 78
主要介绍数据结构和算法分析的相关知识,包括线性表,栈,队列,串,树,图等等,实现这些的编程语言为Java。
FireOct
移步至 http://sixteen.site
展开
-
Java数据结构-线性表之栈的应用-递归及其应用
递归函数的定义:把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数(递归函数必须有一个结束的条件,以免陷入无穷尽的递归中)。迭代和递归的区别是: (1).迭代使用的是循环结构,递归使用的是选择结构。 (2).递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。但是大量的递归调用会建立函数的副本,会耗费大量的时间和内存。 (3).迭代则不需要反复调用函数和原创 2015-08-27 21:12:49 · 1074 阅读 · 0 评论 -
Java数据结构-二叉查找树续以及平衡二叉查找树
前面一篇文章讲到了二叉查找树的实现,其中的插入操作是使用非递归方法实现的,这里再增加一种递归实现插入的操作,Java代码如下,建议增加到前一篇文章对应的FOBinarySearchTree.java中;/** * @TODO 二叉排序树插入元素(递归方法) * @param e 需要插入的元素 * @return true or false */ public boolean insert(原创 2015-08-27 21:10:24 · 867 阅读 · 0 评论 -
Java数据结构-树的应用-二叉查找树
二叉查找树也叫二叉排序树。对于树中的每个节点X,它的所有左子树中项的值小于X节点中的项,所有右子树中的项的值大于X的项。需要实现的基本操作有:1.包含:判断某个元素是否包含在二叉查找树中,若存在则放回true,否则返回false。具体操作步骤如下:(1).从根结点开始进行判断,根结点为空则直接结束返回false;(2).如果相等则直接结束返回true;如果大于根结点的值,则继续与根结点的右子树进行比原创 2015-07-29 13:37:06 · 1442 阅读 · 0 评论 -
Java数据结构-串及其应用-KMP模式匹配算法
串(string)是由零个或多个宇符组成的有限序列,又名叫字符串。定义的解释: 串中的字符数目n称为串的长度,定义中谈到“有限”是指长度n是一个有限的数值。 零个字符的串称为空串(null string),它的长度为零,可以直接用两双引号一表示,也可以用希腊Φ字母来表示。 所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。下面是串的一些概念性东西: 空格串,是只包含空格的串。原创 2015-07-26 18:35:22 · 1316 阅读 · 0 评论 -
Java数据结构-二叉树及其遍历
二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点: 0<=度<=2; 左右子树是有顺序的,不能颠倒; 不论有几棵子树,也要区分它是左子树还是右子树。 二叉树的五种基本形态: 空二叉树; 只有一个根结点; 根结点只有左子树; 根结点只有右子树; 根结点既有左子树又有右子树。 举例原创 2015-07-23 22:51:28 · 1366 阅读 · 0 评论 -
Java数据结构-树及树的存储结构
树的定义:n(n>=0)个节点的有限集。 n=0时称为空树。 n!=0时为非空树,有且仅有一个特定的节点——根;n>1时,其它节点可以分为m(m>0)个互不相交的有限集T1~Tm,其中每一个集合本身又是一棵树,并且称为根的子树。 树的一些基本术语: 树的结点:由一个数据元素和若干个指向其子树的分支组成。 结点的度:结点所拥有的子树的个数(即分支数)称为该结点的度。 叶子结点:度为0的结点称为叶子结点原创 2015-07-23 00:06:45 · 7757 阅读 · 0 评论 -
Java数据结构-线性表之队列
队列(Queue)的定义:只允许在一端进行插入另一端进行删除操作的线性表。允许插入的一端称为队尾(rear) ,允许删除的一端称为队头(front)。 具有“先进先出”特点。队列也是线性表,所以也存在顺序结构和链式结构。顺序队列:对于队列,入队操作的解释为: (是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为0(1)。) 判断队列是否已满; 如果没满则先给队尾元素赋值; 然后将队尾指针后原创 2015-07-21 09:42:03 · 1179 阅读 · 0 评论 -
Java数据结构-线性表之栈(顺序栈和链栈)
栈的定义:(特殊的线性表) 仅在表的一端进行插入和删除的线性表。允许插入、删除的这一端称为栈顶,另一端称为栈底。表中没有元素时称为空栈。 被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表。 栈更具存储方式的不同分为两种:顺序栈和链栈。顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据原创 2015-07-21 09:34:17 · 1286 阅读 · 0 评论 -
Java数据结构-线性表之链表应用-检测链表是否有环
如何检测一个链表是否有环?这个是一个出现频率较高的面试题。 如下是一个含有环的链表。 (图片来自http://www.nowamagic.net/librarys/veda/detail/2245 一个有很多关于数据结构的文章的网站,还有其他的资料,可以看看) 我这里解题的方法有三种: 快慢指针方法:两个速度不一样的指针遍历总会相遇; 利用环的顶点数和边相等的关系; 两个指针遍历判断原创 2015-07-20 12:10:45 · 1197 阅读 · 0 评论 -
Java数据结构-线性表之单链表应用-单链表合并
问题详细描述: 将递增有序A、B两链表归并成一个按元素值非递增(允许有相同值)有序的链表C。解题思路: 利用A、B两表递增有序的特点,依次取出当前结点进行比较,将当前值较小者摘下,插入到C表的头部,由于采用的是头插法,最先找到的最小值结点将会在C表的尾部,依次类推,所以得到的C表则为非递增有序的。这里的递增递减性质需要根据代码具体修改实现。已在代码中给出提示。/** * @TODO 两原创 2015-07-19 23:23:49 · 1020 阅读 · 0 评论 -
Java数据结构-线性表之单链表应用-重复节点的删除
整个问题的解题思路如下: 建立指针p,用于遍历链表; 建立指针q,q遍历p后面的结点,并与p数值比较; 如果q与p值相等,则删除q。如果q有后继节点,则将q前驱节点和q后继节点链接起来;否则直接开始下一轮遍历。 Java代码实现如下,建议将这段代码copy到之前的Java版本的LinkedList(FOLinkedList)中。/** * @TODO 重复节点的删除 * @param foll原创 2015-07-19 23:22:29 · 1331 阅读 · 2 评论 -
Java数据结构-线性表之单链表应用-单链表的逆置
单链表的逆置,就是将现有单链表中的元素的顺序倒置过来。之前提过单链表的整表创建,那里曾说过两种方法:头插法和尾插法; 在我的Java版本的LinkedList中,添加方法使用的是尾插法。 而单链表的逆置正好是利用头插法来进行。 下面看看演示: 下面是我的Java代码实现,建立在之前的代码的基础上/** * @TODO 单链表添加元素,头插法 * @param e 数据元素 * @r原创 2015-07-19 23:19:52 · 2379 阅读 · 0 评论 -
Java数据结构-线性表之静态链表
静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标。这样的链表称之为静态链表。 链表中的数组第一个和最后一个位置需要特殊处理,不存数据。第一个位置(即数组0下标)的节点的指针用来存放备用链表的第一个节点的数组下标。最后一个位置(即数组长度MaxSize-1下标)的节点的指针用来存放指向有数值的第一个数据元素的数组原创 2015-07-19 17:27:19 · 2353 阅读 · 0 评论 -
Java数据结构-线性表之循环链表
循环链表的定义:将单链表的尾节点的空指针改为指向头结点的指针,这样的单链表就变成单循环链表了,也叫循环链表。下面摘抄了《大话数据结构》中的一段分析。如下图: 解释: 循环链表里面的头结点和单链表里面的头结点是一样的,都是为了操作统一和方便而设定的,不是必须节点。这里为了方便操作还会进行一种改变,就是去掉循环链表的头指针,而增加一个指向循环链表尾部节点的尾指针。 这样相对来说可以通过O(1)时间原创 2015-07-19 17:22:33 · 745 阅读 · 0 评论 -
Java数据结构-线性表之双向链表
双向链表的定义:在单链表的基础上,给每个节点增加一个指针域,用来指向该节点的前驱节点,这样形成的链表称之为双向链表。 利用空间换时间。整个双向链表的形式如图所示:下面就摘了《大话数据结构》的插入操作演示: 需要注意的是保证链不要断掉,上述图中第3和第4步的顺序不要颠倒。 继续删除操作的演示: 双向链表也有循环链表,叫双向循环链表,介绍如下:原创 2015-07-19 17:21:32 · 791 阅读 · 0 评论 -
Java数据结构-线性表之单链表LinkedList
线性表的链式存储结构,也称之为链式表,链表;链表的存储单元可以连续也可以不连续。 链表中的节点包含数据域和指针域,数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域。注意一个头结点和头指针的区别: 头指针: 指向链表的第一个节点的指针,若链表有头结点,则是指向头结点的指针; 头指针具有标识作用,所以常用头指针作为链表的名字; 不论链表是否为空,头指针都不为空; 是链表的必原创 2015-07-18 22:41:43 · 1291 阅读 · 0 评论 -
Java数据结构-线性表之顺序表ArrayList
线性表的顺序存储结构,也称为顺序表,指用一段连续的存储单元依次存储线性表中的数据元素。根据顺序表的特性,我们用数组来实现顺序表,下面是我通过数组实现的Java版本的顺序表。package com.phn.datestructure; /** * @author 潘海南 * @Email 1016593477@qq.com * @TODO 顺序表 * @date 2015年7月16日 */原创 2015-07-18 22:25:15 · 1494 阅读 · 0 评论