数据结构算法
文章平均质量分 54
数据结构等习题练习
~四时春~
言行一致是成功的开始
展开
-
查找算法
查找算法1.顺序(线性)查找2.二分查找/折半查找(1)递归(2)非递归3. 插值查找4.斐波那契查找在java中,我们常用的查找有四种1.顺序(线性)查找public class SeqSearch { public static void main(String[] args) { int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 int index = seqSearch(arr, 11); if(index == -1) {原创 2021-09-07 21:43:21 · 342 阅读 · 2 评论 -
快速排序
快速排序介绍及基本思想代码实现介绍及基本思想快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。代码实现public class KuaiPai { public static void main(String[] args) { int[] arr={-9,7原创 2021-09-05 21:32:57 · 107 阅读 · 0 评论 -
插入排序
插入排序排序思想排序原理代码实现排序思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。排序原理1.把所有元素分为两组,已经排序和未排序的;2.找到未排序的组中的第一个元素,向已经排序的组中进行插入;3.倒叙遍历已经排序的元素,依次和待插入元素进原创 2021-09-01 21:00:42 · 124 阅读 · 0 评论 -
选择排序
选择排序思想实现流程代码思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]—arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]–arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]–arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]–arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n原创 2021-09-01 16:43:59 · 97 阅读 · 0 评论 -
冒泡排序
冒泡排序排序思想冒泡优化排序思想通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。代码实现:@Test public void Bubbling(){ int arr[]={4,2,7,5,8,9,6}; int temp=0; for (int i=0;i<arr.length-1;i++){ for (int原创 2021-08-31 22:00:29 · 86 阅读 · 0 评论 -
线索化二叉树
线索化二叉树线索二叉树基本介绍案例线索二叉树基本介绍1)n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")2)这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种3)一个结点的前一个结点,称为前驱结点4)一个结点的后一个原创 2021-09-12 21:16:48 · 221 阅读 · 1 评论 -
Java中用数组表示一个栈
栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈原创 2021-08-30 19:20:38 · 142 阅读 · 0 评论 -
Java中的二叉树---初识二叉树
二叉树为什么需要树这种数据结构二级目录三级目录为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图]链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析原创 2021-09-08 21:02:40 · 152 阅读 · 0 评论 -
顺序存储二叉树
顺序存储二叉树顺序存储二叉树的概念例题及代码实现三级目录顺序存储二叉树的概念基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看下面的示意图。要求:右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历顺序存储二叉树的特点:1)顺序二叉树通常只考虑完全二叉树2)第n个元素的左子节点为 2 * n +原创 2021-09-11 22:54:35 · 173 阅读 · 0 评论 -
Josephu(约瑟夫、约瑟夫环) 问题
Josephu问题问题描述代码实现1.创建一个Boy类,表示一个节点2.创建一个环形的单向链表3.执行代码问题描述Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结原创 2021-08-29 21:50:44 · 193 阅读 · 0 评论 -
JAVA中栈和队列的常用方法
栈JAVA中栈类是继承了Vector实现的,基本特征是先进后出,并且只能在一侧进出方法作用Stack()定义一个空栈empty()栈空返回真,否则返回假peek()获取栈顶值,不出栈pop()栈顶值出栈push()入栈search()返回对象O在栈中的位置(以1开始)队列JAVA中队列是接口,继承了Collection类,先进先出。方法作用add()入队(若失败则抛出IllegalStateException异翻译 2021-08-28 20:43:38 · 288 阅读 · 0 评论 -
Java中的二叉树--进阶
二叉树进阶二叉树查找例题及代码实现二叉树删除例题及代码实现二叉树查找使用前序、中序、后序的方式来查询指定的结点前序查找思路先判断当前节点的no是否等于要查找的如果相等,则返回当前节点如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找如果左递归前序查找,找到节点,则返回,否则继续判断,当前节点的右子节点是否为空,如果不为空,则继续向右递归前序查找。中序查找思路判断当前节点的左子节点是否为空,如果不为空,则递归中序查找如果找到,则返回,如果没有找到,就和当前节点比较原创 2021-09-11 11:19:53 · 131 阅读 · 2 评论 -
单链表结构经典习题
文章目录单链表结构经典习题设计一个链表1.尾插法2.头插法3.添加一个新的节点到指定位置4.删除某个中间指定节点5.找到中间某个指定节点6.找出链表长度7.查找单链表中倒数第k个节点8.合并两个有序的链表,保证合并之后的链表依然有序9.不允许改变链表的结构,逆序输出链表10.改变链表的结构,将当前的链表逆置11.两个链表相交,求出相交节点12.判断链表是否带环,并求环的入口点单链表结构经典习题设计一个链表class MySingleList<T> { //永远指向链表当中的第一个节原创 2020-12-11 00:21:16 · 173 阅读 · 0 评论 -
栈实现综合计算器
使用栈完成表达式的计算思路通过一个 index 值(索引),来遍历我们的表达式如果我们发现是一个数字, 就直接入数栈如果发现扫描到是一个符号, 就分如下情况3.1 如果发现当前的符号栈为 空,就直接入栈3.2 如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符, 就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈, 如果当前的操作符的优先级大于栈中的操作符, 就直接入符号栈.当表达式扫描完毕,就原创 2021-08-30 20:40:01 · 70 阅读 · 0 评论 -
斐波那契数列
斐波那契数列题目:1.递归算法(不建议使用):2.优化递归(利用数组保存重复数字):3.动态规划(递归算法)题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。1.递归算法(不建议使用):public int fib(int n)原创 2021-04-15 23:05:53 · 187 阅读 · 0 评论