数据结构与算法
文章平均质量分 59
木凡空
就让光芒折射泪湿的瞳孔
映出心中最想拥有的彩虹
展开
-
Java算法之动态规划详解
一、简介二、示例1.数塔取数一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。 该三角形第n层有n个数字,例如: 第1层有一个数字: 5 第2层有两个数字: 8 4 第3层有三个数字: 3 6 9 第4层有四个数字: 7 2 9 5最优方案是:5 + 8 + 6 + 9 = 28public static int tower2(i原创 2020-08-13 22:53:57 · 689 阅读 · 0 评论 -
Java中缀表达式转后缀表达式并计算
表达式一般有前缀表达式、中缀表达式和后缀表达式3种表现形式。其中,中缀表达式是平时手写算术表达式的一种描述形式,将运算符放在两个操作数中间,按人的思维来运算。但由于运算符有优先级,计算机无法像人一样思考,只能死板执行,所以计算时用中缀表达式很不方便。而后缀表达式(逆波兰表达式)区别于中缀表达式,是将运算符放在两个操作数之后,无运算符优先和无括号约束问题,很适合计算机进行计算。因此,我们常常需要...原创 2017-12-29 20:22:47 · 780 阅读 · 0 评论 -
Java大数加法运算
所谓大数是指超过整数最大上限的数,是无法用一般的int整型变量来保存的,因此也不能通过直接的加法运算来求得它们的和。 要解决这个问题,可以把两个加数看成字符串,将字符串中的相应数字分别存入两个栈中,每次从两个栈弹出对应位的数字相加,和(或和的个位数)存入结果栈中。简要步骤:将两个加法的相应位从高位到低位依次压入栈stackA和stackB中,结果栈stackSum用来存放最终...原创 2017-12-29 12:21:51 · 5600 阅读 · 1 评论 -
Java查找算法之折半查找
折半查找又称为“二分查找”,算法复杂度为nlog2n。1.折半查找思路设有序顺序表{a[0], a[1], ......, a[n-1]},先求出查找区间中间元素下标mid,然后将该位置值a[mid]与要查找值key比较,比较结果有3种可能性:若key=a[mid],则查找成功,返回下标;若key若key>a[mid],则要查找元素在mid右侧,缩小查找区间到表后半部分再进原创 2018-01-13 21:31:05 · 6254 阅读 · 0 评论 -
Java查找算法之顺序查找
顺序查找又称为线性查找,是一种最简单、最基本的查找方法。顺序查找的基本思想是从顺序表的一端开始,依次将每一个数据元素的值与关键字值key比较,若相等,则表明查找成功;若直到所有元素都比较完毕仍找不到,则表明查找失败。代码如下:public class Test { //顺序查找 public int seqSearch(int a[], int key) {原创 2018-01-13 19:59:19 · 1433 阅读 · 0 评论 -
Java排序算法之归并排序
归并排序的基本思想是将待排的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。 合并两个子序列的过程称为两路归并。1.排序过程2.代码实现public class Test { //归并两个子序列 public void merge(int a[], int b[], int left, int mid,原创 2018-01-12 16:21:08 · 179 阅读 · 0 评论 -
Java排序算法之快速排序
快速排序的基本思想是任取待排序元素序列的某个元素(例如第一个元素)作为基准,按照该元素的排序码大小,将整个元素序列划分为左右两个子序列,左侧子序列所有元素值都小于基准值,右侧子序列所有元素值都大于或等于基准值。然后分别对这两个子序列重复相同操作,直到所有元素都排列有序为止。1.算法描述QuickSort(List){ if(List的长度大于1) {原创 2018-01-09 18:23:51 · 151 阅读 · 0 评论 -
Java排序算法之插入排序
直接排序的基本思想是每趟将一条待排记录,按其关键字值的大小插入到前面已经排好序的记录序列中,直到全部记录插入完成位置。1.示例 序列: 8 6 2 4 5 7 1 32.代码public class Test { //直接插入算法 public void insertSort(int a[], int n) {原创 2018-01-08 21:44:16 · 166 阅读 · 0 评论 -
Java排序算法之选择排序
选择排序的主要思想是每一趟待排序列中选取值最小的记录,即第1趟从n个记录中选取值最小的记录,第2趟从剩下的n-1个记录中选取值最小的记录,......,直到整个序列中的记录都选完为止。1.示例序列: 8 6 2 4 5 7 1 32.代码public class Test { //选择排序算法 public void selectSort(i原创 2018-01-07 19:53:47 · 224 阅读 · 0 评论 -
Java排序算法之冒泡排序
日常生活中,经常需要对说收集到的各种数据进行处理,其中排序就是处理数据的一种非常重要的操作。排序,简单来说就是将一组“无序”的数据元素序列调整为“有序”的数据元素序列的一种操作。本文先介绍一下排序算法中的冒泡排序。一、冒泡排序冒泡排序的基本思想是顺序扫描数据元素序列,将相邻两个数进行比较,将较小者交换到前面(上浮),将较大者交换到后面(下沉)原创 2018-01-07 16:25:59 · 226 阅读 · 0 评论 -
Java二叉树的实现
树形结构就是一种非常重要的非线性结构。在树形结构中数据元素之间具有一对多的逻辑关系,它反映了数据元素之间的层次关系,和一个数据元素可以有多个后继但最多只有一个前驱的特点。树形结构在现实中有很多实际应用。一、 树 树是由n(n≥0)个结点所构成的有限集合,当n=0时,称为空树。 例: 常用术语: 1.树的结点 树的节点是由一个数据元素和关联其子树的边所原创 2018-01-06 14:00:34 · 371 阅读 · 0 评论 -
Java循环队列的实现
队列是一种特殊的线性表,其特殊性体现在只允许在表尾插入元素,表头删除元素。它具有先进先进的特性。插入操作称为入队,删除操作称为出队。进行插入操作的端称为队尾rear,进行删除操作的端称为队头front。在实际使用中,由于顺序队列经常会因数组下标越界出现”假溢出“问题,所以除了一些简单应用之外,真正实用的队列是循环队列。队空状态: front=rear=0队满状态: f原创 2018-01-03 10:19:45 · 2084 阅读 · 1 评论 -
Java栈的实现
栈是一种只能在一端进行插入和删除操作的特殊线性表。 其中,允许插入和删除的一端称为栈顶,另一端称为栈底。通常,将栈的插入操作称为入栈,删除操作称为出栈。入栈时元素总是放在栈底,而出栈的总是栈顶元素。因此,栈中元素采用的是“后进先出”的方式。 栈的数据元素类型可以任意,只要是同一种类型即可。它的基本操作包括清空、判空、求元素个数、获取栈顶、入栈和出栈等。 代码如下: public class Sq原创 2017-12-31 15:51:45 · 12759 阅读 · 0 评论 -
Java单链表的实现
线性表是由n(n>=0)个元素构成的有限序列,通常表示为a0,a1,a2, ...,an-1,它是最简单的数据结构。而链表是采用链式存储的方式存储的线性表,它每一个结点包含存放数据元素值的数据域和指向下一个结点的指针域。若一个结点中指针域只有一个,则称该链表为单链表。 单链表是由若干结点连接而成,因此要实现单链表,首先要设计结点类。结点类由两部分构成,其中data是数据域,存放数据元素的值;nex原创 2017-12-31 11:32:05 · 283 阅读 · 0 评论 -
Java顺序表的实现
线性表是由n(n>=0)个元素构成的有限序列,通常表示为a0,a1,a2, ...,an-1,它是最简单的数据结构。而顺序表就是顺序存储的线性表,它是用一组地址连续的存储单元依次存放各个数据元素的存储结构。 顺序表的主要操作有清空、判断是否为空、求当前长度、获取某个位置元素、插入、删除、查找元素位置等。其中几项很简单,只有插入、删除可能要思考一下,但也是容易解决的。代码如下: public cla原创 2017-12-30 20:16:11 · 1031 阅读 · 0 评论