- 博客(38)
- 收藏
- 关注
原创 数据结构与算法(Java)
数据结构与算法(Java)在学习数据结构与算法(C语言)版本后,特地又学习了Java版本,以下为我的笔记:稀疏数组 稀疏数组(sparsearray)与二维数组的相互转换队列链表: 单链表 双向链表 约瑟夫问题(Josephu)栈 中缀表达式 逆波兰计算器递归 迷宫问题 八皇后问题排序 冒泡排序 选择排序 插入排序 希尔排序 快速...
2020-11-12 10:27:44
3525
14
原创 图(Java)
图(Java)1.定义图形结构 中,任意两个数据元素之间都可能存在关系,又称作 网状结构 。图的用途极为广泛:在图中的数据元素通常称为顶点,图(Graph )是由顶点集合( (Vertex )及顶点之间的 关系集合( Edge )组成的一种数据结构。2.常用术语1.有向图和无向图在图中,根据顶点之间的关系是否有 方向性 可将图分为有向图和无向图。对于无向图 ,顶点的关系为无向边;对于有向...
2020-04-09 16:17:58
675
原创 平衡二叉树(Java)
平衡二叉树(Java)平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根...
2020-04-08 15:06:04
482
原创 二叉排序树(Java)
二叉排序树(Java)二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。定义一棵空树,或者是具有下列性质的二叉树称为二叉排序树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树;相关操作举个栗子以结点权值集合...
2020-04-05 19:01:00
426
原创 赫夫曼树编码(Java)
赫夫曼树编码(Java)赫夫曼编码(Huffman Coding),又称哈夫曼编码,是一种编码方式,赫夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。编码:在数据通讯中,经常需要将传送的文字转换成由二进制字符0 ,1组成的二进制串赫夫曼编码:...
2020-04-04 17:40:48
586
1
原创 赫夫曼树(Java)
赫夫曼树(Java)赫夫曼(Huffman )树 ,也称最优二叉树,是指对于一组带有确定权值的叶子结点,构造的具有最小带权路径长度 的二叉树。二叉树的路径长度: 由根结点到所有叶子结点的路径长度之和二叉树的带权路径长度: 从根结点到各个叶子结点的路径长度与相应结点权值的乘积之和特点权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。举个栗子以结点权值集合为arr...
2020-04-03 17:59:59
297
原创 堆排序(Java)
基数排序(Java)堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。时间复杂度:O(nlogn)稳定性:不稳定实质:分别排序,分别收集图示代码如下...
2020-04-02 21:25:18
169
原创 线索二叉树(Java)
线索二叉树(Java)在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化定义对二叉树进行遍历,可以把二叉树中所有结点排列为一个线性序列;为了保留结点在某种遍历序列中 直接前驱和直接后继 的位置信息,可以利用二叉树的二叉链表存储结构中的空指针域 来指示意义一个具有n 个结...
2020-04-01 15:41:17
615
原创 顺序二叉树(Java)
顺序二叉树(Java)二叉树的顺序存储是将二叉树的所有结点,按照一定的次序,存储到一片连续的存储单元中,主要针对完全二叉树。重要性质若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意 一个编号为 i 的结点有以下性质:节点为i 的左孩子结点编号为2i,为右孩子结点编号为 2i+1; ;若 i=1 ,则该结点是二叉树的根,无双亲;否则i>...
2020-03-31 11:40:30
1022
原创 树和二叉树(Java)
树和二叉树(Java)树树是重要的非线性数据结构,元素之间存在一对多的关系,直观的看也是以分支关系定义的层次结构,在客观世界中也广泛存在如文件层次结构等。1.树的定义树结构 (除了一个称为根的结点外)每个元素都有且仅有一个直接前趋,有且仅有零个或多个直接后继。树是递归结构2.树的特点树的 根结点没有前驱结点 , 除根结点之外的所有结点有且只有一个前驱结点 。树中所有结点可以...
2020-03-30 21:38:43
416
2
原创 斐波那契查找(Java)
斐波那契查找(Java)斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为Fn,完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。重要公式:mid=left+F[k-1]-1适用条件: 采用顺序存储结...
2020-03-20 17:05:58
300
原创 插值查找(Java)
插值查找(Java)插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。适用条件: 采用顺序存储结构的有序表重要公式:mid=left+(right-left)*(value-arr[left]) / (arr[right]-arr[left])优点:对于数据量较大,数...
2020-03-20 16:22:16
628
1
原创 二分查找(Java)
二分查找(Java)二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。查找过程:每次将待查记录所在区间缩小一半适用条件: 采用顺序存储结构的有序表代码如下public class Binarysearch { public static void main(String[]...
2020-03-20 13:34:42
2492
原创 线性查找(Java)
线性查找(Java)线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。实现思路线性查找是很简单的查找方法,循环遍历发现需查找的元素直接返回即可,若存在相同元素时,则需要新建一个数组,存放所有需查找的元素,后遍历输出。代码如下public class...
2020-03-20 12:23:17
520
原创 归并排序(Java)
归并排序(Java)归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。时间复杂度:O(nlog 2 n)稳定性:稳定实质:将两个或两个以上的序列组合成一个...
2020-03-19 22:02:36
158
原创 快速排序(Java)
快速排序(Java)快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度:O(nlogn)稳定性:不稳...
2020-03-19 18:32:37
448
原创 希尔排序(Java)
希尔排序(Java)希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1...
2020-03-18 12:49:30
247
原创 插入排序(Java)
插入排序(Java)插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,算法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一...
2020-03-18 11:39:09
257
原创 选择排序(Java)
选择排序(Java)选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零时间复杂度:O(n2)算法稳定性:不稳定实质:依次选择相对最大(小)的元素图示...
2020-03-18 08:19:33
354
原创 冒泡排序(Java)
冒泡排序(Java)它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。时间复杂度:O(...
2020-03-18 07:49:25
349
原创 八皇后问题(Java)
八皇后问题(Java)八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法八皇后问题算法思路先把第一个皇后放在第一行第一列第二个皇后放在第二行第一列然后判断是否符合条件,如果不符合条件,就继续放在第二行第二...
2020-03-17 17:01:29
279
原创 迷宫问题(Java)
迷宫问题(Java)粗略模拟迷宫问题,约定:数字“1”表示迷宫的墙;起始点为(1,1)若map[i][j]==0,表示未走过;若map[i][j]==1,表示遇到墙,无法经过;若map[i][j]==2,表示可以通过;若map[i][j]==3,表示已经走过;行走策略为 下->右-> 上-> 左代码如下public class Migong { pu...
2020-03-17 16:16:43
586
原创 中缀表达式求值(Java)
中缀表达式(Java)中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)中缀表达式是 关于栈的经典算法题之一中缀表达式的求解需要两个栈来存储,且设置为泛型,一个栈存操作数,一个栈存操作符,需要输入一个表达式字符串并将其转为字符串数组以提取有效字符。...
2020-03-17 12:56:48
2346
原创 栈(Java)
栈(Java)栈(stack)是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是一个先入后出的有序列表栈满时再做进栈运算必定产生空间溢出,...
2020-03-14 16:34:35
745
原创 约瑟夫问题(Josephu)(Java)
约瑟夫问题(Josephu)(Java)问题描述设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示用一个不带头结点的循环链表来处理Josephu问题:先构成一一个有n个结点的单循环链表,然后由k结点起从1...
2020-03-13 20:05:14
652
原创 双向链表(Java)
双向链表(Java)双向链表:也叫双链表,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。双向链表的结构特点如下:较单链表相比优势:插入删除不需要移动元素,可以自我删除可双向遍历代码如下:public class Doubleloop { Doubleloop prior=this;//上...
2020-03-13 15:42:50
484
原创 单链表(Java)
单链表(Java)单链表是链表的一种基本结构。在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点。一个最简单的结点结构如图所示,它是构成单链表的基本结点结构单链表的基本操作单链表的基本操作有:增(add)public void add(Any-[9rtrtfrtfgrtgpType a){ Node<AnyType> renod...
2020-03-12 19:49:30
596
原创 稀疏(sparsearry)数组(Java)
稀疏(sparsearry)数组(Java)当一个数组中大部分元素都为0,或为同一个值的数时可用稀疏数组减少定义空间。稀疏数组记录数组有几行几列,有多少不同元素的值...
2020-03-03 11:38:42
1101
原创 L1-063 吃鱼还是吃肉(Java)
L1-063 吃鱼还是吃肉(Java)国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。现在你要根据小宝宝的身高体重,给出补充营养的建议。输入格式:输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:性别 身高 体重输出格式:对于每一位宝宝,在一行...
2020-02-28 12:41:21
498
原创 L1-062 幸运彩票(Java)
L1-062 幸运彩票(Java)彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。输入格式:输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。输出格式:对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wi...
2020-02-28 11:56:08
763
原创 L1-039 古风排版 (Java)
L1-039 古风排版 (Java)及charAt()中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)输入样例:4This i...
2020-02-25 14:35:25
536
原创 L1-034 点赞(Java)
L1-034 点赞(Java)及split()微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。输入格式:输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K ...
2020-02-24 14:52:09
521
原创 L1-023 输出GPLT(Java)
L1-023 输出GPLT(Java)及快速输入这里是引用给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。输入格式:输入在一行中给出一个长度不超过10000的、仅由英文...
2020-02-22 16:09:36
798
原创 L1-015 跟奥巴马一起画方块(Java)及拓展
L1-015 跟奥巴马一起画方块及拓展美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:这里是引用...
2020-02-21 20:57:22
235
原创 正则表达式
说明正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。标准BREEREARE其中 BER 和 ERE 属于 POSIX 标准POSIX正则表达式BRE(基本正则表达式) 定义的语法符号:. - 匹配任意一个字符。[] ...
2020-02-21 13:13:54
678
原创 L1-011 A-B(java)及正则表达式
L1-011 A-B(Java)及正则表达式计算A-B.不过A和B都是字符串——即从字符串A中把字符串B所包含的字符都删掉,剩下的字符组成的就是字符串A-B.输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不超过104 ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。输出格式:在一行中打印出A−B的结果字符串输入样例:I ...
2020-02-20 23:50:49
1192
7
原创 L1-008 求整数段和(Java)
例题:求整数段和给定两个整数A和B,输出从A到B的所有整数以及这些数的和输入格式:输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。输入样例:-3 8输出样例: -3 -2 -1...
2020-02-20 17:07:17
510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人