数据结构与算法
文章平均质量分 61
小鑫-Chen
持之以恒
展开
-
12 数据结构与算法之查找算法
查找算法Java 中,我们常用的查找有四种:顺序 / 线性查找二分查找 / 折半查找插值查找斐波那契查找线性查找算法按顺序与序列中的值一一比对即可。代码实现:package com.atguigu.search;public class SeqSearch { public static void main(String[] args) { int[] arr = {1, 9, 11, -1, 34, 89}; int value = 89;原创 2021-03-09 16:25:31 · 114 阅读 · 0 评论 -
11 数据结构与算法之排序算法
排序排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序,将需要处理的所有数据都加载到内部存储器中进行排序外部排序,数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。内部排序分类:插入排序:直接插入排序和希尔排序选择排序:简单选择排序和堆排序交换排序:冒泡排序和快速排序归并排序基数排序算法的时间复杂度时间频度:一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。int result = 0;for(int i = 1; i <=原创 2021-03-07 20:58:08 · 138 阅读 · 3 评论 -
11 数据结构和算法之递归
递归简单地说,递归就是方法自己调用自己,每次调用时传入不用的变量。递归有助于编程者解决复杂的问题,同时让代码变得简洁。递归调用的简单示意图:递归要遵守的重要规则:执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响,比如上面那个例子中的 n。(除非是引用类型)递归必须向退出递归的条件的逼近,否则就无限递归了当一个方法执行完毕,或者遇到 return,就会返回带原来的位置继续执行(如果有值得话,那么值也会带回来)。谁调用的,就返回给谁。迷宫回溯问题原创 2021-03-05 20:47:13 · 100 阅读 · 0 评论 -
10 数据结构与算法之前中后缀表达式
前缀表达式前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前(3+4)×5-6 对应的前缀表达式为 -×+3456前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个元素,用运算符(栈顶元素 op 次顶元素)对它们做相应运算,并将结果入栈。重复以上操作直到扫描完表达式。中缀表达式中缀表达式就是常见的运算表达式,如 (3+4)×5-6中缀表达式对人来说比较熟悉,但是对计算机却不好操作,计算机一般会转换为后缀表达式来求值。后缀表达方原创 2021-03-04 11:56:06 · 292 阅读 · 2 评论 -
09 数据结构与算法之栈
栈的应用场景计算表达式:7 * 2 * 2 + 5 + 3 * 2 - 3 / 2栈的介绍栈的英文 stack栈是一个先入后出的有序列表栈限制线性表只能在一端进行插入和删除,而允许插入和删除的这一端称为栈顶(top),另一端称为栈底(bottom)。先进栈的元素在栈底,后进入的元素在栈顶。栈的实现思路因为栈也是一个列表,所以我们使用数组来模拟栈。定义一个变量为 top,表示栈顶,初始化为 -1\判断栈空return top == -1;判断栈满return top ==原创 2021-03-03 11:42:05 · 71 阅读 · 0 评论 -
08 数据结构与算法之单向环形链表
单向环形链表应用场景Josephu(约瑟夫、约瑟夫环)问题:设编号为 1, 2,…n 的 n 个人围坐一圈,约定编号为 k 的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。不带头节点的单向环形链表示意图:构建一个单向环形链表的思路:先创建一个节点,让 first 指向该节点,并形成环形后面当我们每创建一个新的节点,就把该节点加入到已有的环形链表中。代码实现:...原创 2021-03-02 20:43:42 · 122 阅读 · 0 评论 -
07 数据结构与算法之双向链表
双向链表介绍单向链表的缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。单向链表不能自我删除,每次要找到它的前一个节点。而双向链表可以自我删除。双向链表的遍历、添加、修改、删除:遍历和单链表 类似,只不过这里还可以从后往前遍历。添加,至少需要一个辅助节点(插入位置的前一个节点或后一个节点)。temp.next = pre.next;pre.next = temp;temp.pre = pre;if(temp.next != null) temp.next原创 2021-03-02 16:41:35 · 80 阅读 · 0 评论 -
06 数据结构与算法之单链表面试题
标题单链表面试题:获取单链表有效节点个数:public int getLength(HeroNode head){ HeroNode temp = head; int length = 0; while(temp.next != null){ length++; temp = temp.next; } return length;}查找单链表中倒数第k个节点:把链表从头到尾遍历一遍,获取链表总长度len;再遍历一遍,第len-k+1个节点就是所需节点public H原创 2020-12-13 21:34:58 · 107 阅读 · 0 评论 -
05 数据结构与算法之单链表
链表介绍链表是有序的列表,但是它在内存中是这样存储的:链表的特点:链表是以节点的方式来存储的。每个节点包含data域和next域,next域指向下一个节点。如图,发现链表的各个节点不一定是连续存储的。链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。带头节点的链表:代码实现public class SingleLinkedListDemo{ public static void main(String[] args){ //创建几个节点先原创 2020-12-09 20:36:31 · 99 阅读 · 1 评论 -
04 数据结构与算法之队列(2)
使用数组模拟环形队列front变量的含义做一个调整,front指向队列的第一个元素,也就是说,arr[front]就是队列的第一个元素。front初始值为0rear变量的含义做一个调整,rear指向队列的最后一个元素的后一个位置。因为希望空出一个空间。rear初始值为0队列满的判断:(rear + 1) % maxSize == front队列空的判断:rear == front队列中有效值的个数:(rear - front + maxSize) % maxSize代码import jav原创 2020-12-08 20:37:23 · 93 阅读 · 0 评论 -
03 数据结构与算法之队列(1)
队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出规则,即,先入队列的数据,要先取出。后存入的要后取出。数组模拟队列如下图所示因为队列的输出、输入是分别从前后端来处理的,因此需要两个变量front、rear分别记录队列前后端的下标。front会随着数据输出而改变,rear会随着数据输入而改变。很致命的问题是,当rear=maxSize-1时,无论front在哪个位置,程序都会提醒“队列满”代码实现import java.util.Scanner;class Ar原创 2020-12-08 19:39:52 · 120 阅读 · 0 评论 -
02 数据结构与算法之稀疏数组
介绍当一个数组中大部分元素为0,或者为同一个值时,可以用稀疏数组来保存该数组稀疏数组的处理方法1. 记录数组中一共有几行几列,有多少个不同的值2. 把具有不同值的元素的行、列及值记录在一个小规模的数组中,从而缩小程序的规模。二维数组:转换后的稀疏数组:说明:第一行存储数组有多少行,多少列,多少个有效值。后面的所有行分别记录有效值的行号和列号。代码实现二维数组转换为稀疏数组1、遍历原始的二维数组,得到有效数据的个数sum2、根据sum,就可以创建稀疏数组sparseArr i原创 2020-12-08 10:54:30 · 206 阅读 · 0 评论 -
01 数据结构与算法之线性结构和非线性结构
线性结构和非线性结构线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。链式存储的线性表称为链表,链表中的存储信息不一定是连续的,元素节点中存放数据元素以及其他元素的地址信息。线性结构常见的有:数组、队列、链表和栈非线性结构非线性结构包括:二维数组、多维数组、广义表、树结构、图结构...原创 2020-12-08 10:11:49 · 172 阅读 · 0 评论