- 博客(37)
- 资源 (14)
- 问答 (4)
- 收藏
- 关注
原创 Java数据结构与算法
一、基本数据结构Java数据结构–顺序表Java数据结构–单链表Java数据结构–循环链表Java数据结构–双链表Java数据结构–顺序栈Java数据结构–链栈Java数据结构–递归Java数据结构–顺序队列Java数据结构–链式队列Java数据结构–循环队列Java数据结构–顺序串Java数据结构–串的堆存储结构Java数据结构–串的链式存储结构Java数据结构–串的模式匹配算法Java数据结构–数组、矩阵、广义表二、树Java数据结构–树Java数据结构–二叉树
2020-07-29 23:04:12 258
原创 Java数据结构--图
一、图某班级的学生信息表如图1.0.1所示,每个学生都来自不同的城市,如果老师从重庆出差到南京,顺路要选择部分学生做一次家访,怎么样选择才最合理呢?图1.0.2是一个简单的模拟城市路线的地图,从重庆出差到南京,如果选择用时最短的路线出差,同时做家访呢?注:图中黑点代表城市,数字代表往返两城市间所需要的时间(单位:小时)。要解决该问题,最好的方法是使用数据结构中图的知识。1.1 图的概念及基本术语图:图G是由两个集合V和E所限定的一种数据结构,记作G=(V,E),其中V是定点有限非
2020-07-25 23:15:06 328
原创 Java基本排序算法 -- 直接选择排序
一、直接选择排序public class SelectSort { /** 直接选择排序 */ public void selectSort(int[] data) { int i, j, small; int temp; for (i = 0; i < data.length - 1; i++) { small = i; for (j = i+1; j < data.length; j++) { //寻找最小的数据元素 if (data[j] <
2020-07-16 23:43:11 1499
原创 Java基本排序算法 -- 冒泡排序
一、冒泡排序public class ChangeSort { public static void main(String[] args) { ChangeSort.bubbleSort(new int[]{9,8,7,6,5,4,3,2,1,0}); } /** 冒泡排序 */ public static void bubbleSort(int[] data) { int i, j, flag = 1; int temp; for (i = 0; i < data
2020-07-16 23:11:47 260
原创 Java基本排序算法 -- 二分插入排序
二分插入排序直接插入排序的算法简洁,容易实现,当n较小时时一种好的排序方法。当是一般情况下记录序列中的记录数量都很大,则此时直接插入排序方法就不适用了;而二分插入排序是在直接插入排序基础上改进的一种排序算法。由于插入排序的操作是在一个有序序列中进行比较和插入的,而比较操作实际上就是在有序序列中作查找操作,这个“查找”操作可以用“二分查找”的方法来实现。按照这种思想,对直接插入排序改进后的排序方法称为二分插入排序,又称折半操作排序。与直接插入排序相比,二分插入排序仅仅减少了记录关键字的比较次数,而记录的
2020-07-15 22:56:21 674
原创 Java基本排序算法 -- 希尔排序
一、希尔排序1.1 算法思想(1)选择一个步长序列t1,t2,…,tk,其中ti > tj, tk = 1;(2)按步长序列个数k,对序列进行k趟排序;(3)每趟排序根据对应的步长ti,将待排序序列分隔成若干长度为m的子序列,分别对各子表进行直接插入排序、仅步长因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度;示例使用希尔排序数组:public class InsertSort { /** * 希尔排序 */ public void shellSor
2020-07-15 22:55:59 151
原创 Java基本排序算法 -- 直接插入排序
一、插入排序1.1 基本思想假设待排序的记录存放在数组r[1…n]中,任何一个待排序的记录序列初始状态可以看成是这种情况:初始时r[1]自成1个有序区,无序区为r[2…n],如图9.2所示。直接插入排序是一种最简单的排序方法,它的基本思想是:仅有一个记录的表,总是有序的,因此,对n个记录的表,可以从第二个记录开始直到第n个记录,逐个向有序表中进行插入操作,从而得到n个记录按关键字有序的表。示例:使用直接插入排序数组A={16, 15, 19, 16, 18, 19, 20, 14}将
2020-07-15 22:46:51 466
原创 Java基本查找算法 -- 哈希表的查找
一、哈希表的查找前面讨论的线性表和树表的查找中,表中的相对位置是随机的,也就是是说,记录在表中的位置跟记录的关键字之间不存在确定关系。因此,在这些表中查找记录时需要进行一系列的关键字比较。这一类查找方法是建立在“比较”的基础上的。在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和表中一个唯一的存储位置相对应,称这个对应关系f为哈希(散列)函数,根据这个思的表称为哈希表。在哈希表中,若出现key1≠key2,而f(key1)=f(key2),则这种现象称为地址冲突key1和k
2020-07-12 23:48:44 3416
原创 Java基本查找算法 -- 树的查找
一、树表查找的对象是以二又树或树作为表的组织形式。树表在进行插入或删除操作时,可以方便地维护表的有序性,不需要移动表中的记录,从而减少因移动记录引起的额外时间开销。常见的树表有二叉树、平衡二叉树、B-树和B+树等。下面将以二叉排序树作为实例进行讲解。二叉排序树(简称BST)的定义:二叉排序树或者是空树,或者是满足如下性质实例的二叉树:(1)若它的左子树非空,则左子树上所有记录的值均小于根记录的值(2)若它的右子树非空,则右子树上所有记录的值均大于跟记录的值。(3)它的左、右子树分别也是二叉
2020-07-12 23:10:09 1569
原创 Java基本查找算法--分块查找
一、分块查找分块查找又称为索引查找,他是一种性能介于顺序查找和二分查找之间的查找方法。它要求按如下的索引方式来存储线性表:将R[0…n-1]均分为b块,前b-1块中的记录个数为s=n/b,最后一块即第b块的记录小于等于s;每块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块的最小关键字,即要求表示“分块有序”的;抽取各块中的最大关键字及其起始位置构成一个索引表IDX[0…b-1],即IDX[i](0<=i<=b)中存放着第i块的最大关键字及该块在表R中的起始位置。由于表R是分块有序
2020-07-12 22:28:54 1629 2
原创 Java数据结构--树、森林和二叉树
一、树、森林和二叉树之间的转换树或森林与二叉树之间存在一一对应的关系。任何一棵树或一个森林可唯一地对应到一棵二叉树;反之,任何一棵二叉树也能唯一地对应到一个森林或一棵树。2.1 将树转化为二叉树树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就能将树转换成相应的二叉树,具体步骤是:1)在所有兄弟结点之间加一连线;2)对每个结点,除了保留与其长子的连线外,去掉该结点与其他孩子的连线。示例:将图2.1.1所示的树转换为二叉树。根据树转二叉树的规则:第一
2020-07-11 23:27:20 906
原创 Java数据结构--哈夫曼树
一、哈夫曼树概述路径:若在树中存在一个结点序列k1,k2, …, kj,使得ki是ki+1的双亲(1 ≤ i ≤ j),则此结点序列称为k1到kj的路径。路径的长度:从k1到kj所经过的分支树称为这两点之间的路径长度,它等于路径上的结点数减1。结点的权:在许多应用中,常常将树中的某个结点赋上一个具有某种意义的数值,这个和某个结点相关的数值称为该结点的权或权值。结点的带权路径长度:值从树根到该结点之间的路径长度与结点的权值得乘积。树的带权路径长度:值树中所有叶子结点的带权路径长度之和,通常记为WP
2020-07-11 18:48:17 577
原创 Java数据结构--线索二叉树
一、线索二叉树的概念在二叉树的链式存储结构中,增加指向前趋和后续结点的信息,称为线索。加上线索的二叉树称为线索二叉树。对二叉树以某种次序进行遍历使其成为线索二叉树的过程称为线索化。二、线索化二叉树在由n个结点构成的二叉树链式存储结构中,存在着n+1个空链域。可以利用这些空链域建立起来相应结点的前趋结点信息和后续结点信息 。在二叉树中,如果某结点有左子树,则其lChind域指向其左孩子,否则其lChild域指向该结点在遍历序序列中的前趋结点;如果其结点有右子树,则其rChild域指向其右孩子,否则
2020-07-10 23:37:07 318
原创 Java数据结构--二叉树
一、二叉树的概念二叉树是结点的有限结合,这个集合或者为空或者是由一个跟结点和两棵互不相交的分别称为左子树和右子树的二叉树组成。二叉树中的每个结点至多有两棵子树,且子树有左右之分,次序不能颠倒。二叉树是一种重要的树型结构,但是二叉树不是树的特例。二叉树的5种形态分别为:空二叉树、只有根结点的二叉树、根结点和左子树、根结点和右子树、根结点和左子树。二叉树与树的区别:二叉树中米格结点的孩子至多不能超过两个,而树对结点的孩子树无限制;另外,二叉树中结点的子树有左右之分,而树的子树没有次序。思考一颗度为2的树
2020-07-09 23:55:11 921
原创 Java数据结构--树
一、树的概念xxx班的学生信息表如图1.1所示,其中学生别分到了不同的学习小组,第一组组长是李华,组员有王丽、张阳、赵斌;第二组组长是孙琪,组员有马丹;第三组组长是刘畅,组员有周天、黄凯。这些信息构成了一颗树,如图1.2所示。这就是一种典型的数据结构–树。要实现学生组员的插入、删除、查找等操作,就要用到树的相关知识。1.1 树的概念树是零个或多个结点的有限集合。结点树为0的数称为空树,结点树大于0的数称为非空树。在一颗树中:1)有且仅有一个特定的称为跟的结点。2)当结点数大于1时,
2020-07-04 23:34:40 858
原创 Java数据结构--数组、矩阵、广义表
一、简介1.1 数组的概念是n(n ≥ 1)个相同数据类型的数据元素a0,a1,…,an-1构成的占用一块联系地址的内存单元的有限集合。1.2 特点(1)数组中数据元素的数据类型相同;(2)数组是一种随机存取结构,只要给定一组下标,就可以访问与其对应的数组元素;(3)数组中数据元素的个数是固定的;1.3 数组的存储在计算机中,表示数组最普通的方式时采用一组连续的存储单元顺序地存放数组元素。由于内存是一维的,而数组是多维结构,我们可以认为二维数组是一个每个数据元素是一维数组的一维数组
2020-07-01 23:38:36 804
原创 Java数据结构--串的模式匹配算法
一、Brute-Force模式匹配算法public class BruteForce { /** * Brute-Force(暴风算法) * 算法思想: * 从目标串s的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符, * 否则从s串的第二个字符起再重新和串t进行比较。以此类推,直至串t中每个字符依次和串s的一 * 个连续的字符序列相等,则称为模式匹配成功,此时串t的第一个字符在串s中的位置就是t在s中 * 的位置,否则模式匹配不成功 *
2020-07-01 23:36:38 433
原创 Java数据结构--串的链式存储结构
一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
2020-07-01 23:35:53 1558
原创 Java数据结构--串的堆存储结构
一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
2020-07-01 23:35:08 1089
原创 Java数据结构--顺序串
一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
2020-07-01 23:34:26 1564
原创 Java数据结构--循环队列
一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。循环队列:将数组的最后一个元素的
2020-07-01 23:33:47 202
原创 Java数据结构--顺序队列
一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。顺序队列–利用顺序存储方式实现的
2020-07-01 23:31:50 290
原创 Java数据结构--链式队列
一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。链式队列–1.2 结构图
2020-07-01 23:29:16 360
原创 Java数据结构--递归
一、简介递归–是指在定义自身的同时又出现了对自身的引用;如果一个算法直接或者间接地调用自己,则称这个算法是一个递归算法;任何一个又意义的递归算法总是有两部分组成:递归调用与递归终止条件二、示例public class Fac { /** * 求n! * * @param n * @return */ public static long fac(int n) { if(n == 0) { return 1; } else { return n*f
2020-07-01 23:24:01 110
原创 Java数据结构--链栈
一、简介1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表。链栈--用链式存储结构实现的栈称为链栈;
2020-07-01 23:23:15 384
原创 Java数据结构--顺序栈
一、简介1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表。顺序栈:由于栈是运输受限的线性表,除了操
2020-07-01 23:21:54 454
原创 Java数据结构--双链表
一、简介1.1 概念双链表的每个结点中都有两个指针,分别指向直接后续和直接前驱。1.2 优点插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素;采用动态存储分配,不会造成内存浪费和溢出。1.3 缺点在有些高级语言中, 不支持指针,不容易实现;需要用额外空间存储线性表的关系,存储密度小;不 能随机访问,查找时要从头指针开始遍历,查找元素的时间复杂度较大。1.4 结构图二、简单实现public class DoubleLinkedList<E>
2020-07-01 23:12:50 195
原创 Java数据结构--循环链表
一、简介1.1 概念对于单链表而言,最后一个结点的地址为空,如果表示最后一个结点的指针域指向头结点,整个链表形成一个环,就构成了单循环链表。与单链表相比,只是将原来判断指针是否为空变为判断是否是头指针,没有其他的变化。访问单循环链表某一结点,可以从任何一个结点开始,顺序向后遍历到达要访问的结点。1.2 优点插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素;采用动态存储分配,不会造成内存浪费和溢出。1.3 缺点在有些高级语言中, 不支持指针,不容易实现;需要用额外空
2020-07-01 23:07:27 291
原创 Java数据结构--顺序表
一、顺序表1.1 概念顺序表示是指按顺序存储结构存储的线性表,顺序存储表中的结点在内存中占用一段连续的存储单元。即线性表中逻辑相邻的元素在内存中存储位置相邻。1.2 优点方法简单,各种高级语言中都有数组,容易实现;不用为表示结点间的逻辑关系而增加额外的存储开销,存储密度大顺序表具有按元素序号随机访问的特点,查找速度快,时间复杂度较小1.3 缺点在顺序表中进行插入、删除操作时,平均移动大约表中一半的元素,因此n较大的顺序表执行效率低需要预先分配适当的存储空间,预先分配过大,可
2020-07-01 23:01:55 455
sqlyog.rar
2019-10-11
mysql__5.5.rar
2019-09-25
makefile.zip
2019-08-28
CMake中文手册.rar
2019-08-17
Git教程By廖雪峰.rar
2019-07-30
GifCam.rar
2019-07-29
Git-2.22.0-64-bit.rar
2019-07-29
MobaXterm.rar
2019-07-07
Mybatis指南
2019-02-28
ASM4使用指南
2019-02-23
Postman-win64-7.3.4-Setup.rar
2008-08-15
这是个什么类型的工程
2016-06-24
jsp出现文号错误,如下图
2016-03-06
ImageIO.read如何解决内存溢出
2016-02-22
java树的节点事件里调用repaint方法 不能实现重绘
2016-02-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人