数据结构与算法
文章平均质量分 92
b u g
这个作者很懒,什么都没留下…
展开
-
图的深度优先与广度优先
当我们需要表示多对多的关系时, 这里我们就用到了图。一、图的概念顶点(vertex)边(edge)路径无向图有向图带权图二、图的表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。1.邻接矩阵邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于 n 个顶点的图而言,矩阵是的 row和 col 表示的是 1…n个点。2.邻接表邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多边都是不存在,会造成空间的一定损失.邻接表的实原创 2020-07-07 15:42:53 · 614 阅读 · 0 评论 -
一颗满是叉叉的树
一、树的产生1.数组存储与链式存储我们在有了链表链表存储与数组存储,为什么还需要树结构尼?对数组存储与链式存储进行分析:1.数组存储方式:优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找、插值查找等提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。若数组满时要插入数据就需要进行扩容。(ArrayList底层也是数组扩容实现的。)数组扩容:每次底层都需要创建新的数组要将原来的数据拷贝到数组并插入数据。ArrayList底层扩容:/*原创 2020-07-03 23:50:45 · 257 阅读 · 0 评论 -
赫夫曼数——文件压缩与解压
赫夫曼树对字符串及文件的压缩与解压原创 2020-06-23 23:29:12 · 367 阅读 · 0 评论 -
哈希表(散列表)
一、概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数 叫做散列表。哈希表可以用来做缓存,将经常需要用的从数据库中查询出来,并存入hash表。供下一次使用。二、哈希表练习题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的 id 时,要求查找到该员工的所有信息.要求:不原创 2020-06-18 19:54:53 · 230 阅读 · 0 评论 -
常用的查找算法(java实现)
java中常用的查找算法有4种:顺序(线性)查找二分查找插值查找斐波那契查找一、顺序(线性)查找顺序(线性)查找只需要数组的顺序依次进行查找,找到后返回数组的下标即可。顺序查找适用于任何数据。缺点是当查找越后面的数花费的时间越长。二、二分查找二分查找的前提条件是这个数组是有序的。二分查找思路:确定数组中间的下标与值。将要查找的数与中间的数进行比较:若比中间的数小,则向比中间值大的区间查找,若比中间数小,则向比中间值小的区间查找,重复第二步,知道找到该数。代码实现:publi原创 2020-06-18 12:25:56 · 774 阅读 · 0 评论 -
十大排序算法就看这里
十大经典排序算法:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序、堆排序、桶排序、计数排序原理及代码实现原创 2020-06-17 22:12:43 · 2285 阅读 · 1 评论 -
一文带你明白时间复杂度
一、排序算法排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序算法分类:1.内部排序指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序2.外部排序当数据量过大时,无法全部加载到内存中,需要借助**外部存储(文件等)**进行排序3.常见的排序算法分类二、时间复杂度(一)度量一个程序(算法)执行时间的方法1. 事后统计法:顾名思义,执行完整个程序(算法)之后统计运行时间,这种方法需要依赖计算机的硬件和软件环境等因素,要求同原创 2020-06-15 10:37:59 · 1503 阅读 · 0 评论 -
好玩的数据结构与算法——八皇后游戏(回溯)
八皇后问题:在一个8X8的棋盘上,放置8个棋子。要求:任意两个棋子不能处于同一行、同一列、同一斜线。问有多少摆法?算法思路分析:第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都 放完,找到一个合适继续第三个皇后,还是第一列、第二列……直到第 8 个皇后也能放在一个不冲突的位置,算是找到了一个正确 解当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解, 全部得到.然后回头继原创 2020-06-14 22:18:30 · 1283 阅读 · 0 评论 -
好玩的数据结构与算法——迷宫路径问题(回溯)
迷宫回溯问题:初始化一个起点,一个终点,从起点走到终点,经过路线。public class MiGong { public static void main(String[] args) { // 二维数组模拟迷宫 int[][] map = new int[8][7]; // 1表示墙壁 for (int i = 0; i < 7; i++) { // 初始化最上方和最下方两行 map[0][i.原创 2020-06-14 22:00:43 · 332 阅读 · 0 评论 -
好玩的数据结构与算法——逆波兰表达式实现计算器求值
逆波兰表达式实现计算器原创 2020-06-10 17:00:21 · 471 阅读 · 0 评论 -
好玩的数据结构与算法——利用栈实现简单的计算器(加减乘除)
中缀表达式实现计算器(加减乘除)原创 2020-06-09 17:05:29 · 3031 阅读 · 0 评论 -
好玩的数据结构与算法——栈(数组模拟与单向链表模拟)
使用单向链表和数组模拟栈原创 2020-06-08 13:25:49 · 168 阅读 · 0 评论 -
好玩的数据结构与算法——约瑟夫问题(单向循环链表)
Josephu 问题:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到m 的那个人出列,它的下一位又从 1 开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由 此产生一个出队编号的序列。这个题目可以用数组做,也可以使用单向环形链表做。这里我使用单向循环链表做。单向循环链表如图:不带头节点单向循环链表的添加思路:循环到链表尾部将新节点的next指向first将链表最后一个节点的next指向新的节点.原创 2020-06-08 10:31:46 · 441 阅读 · 0 评论 -
好玩的数据结构与算法——双链表
单链表的安顺序插入,添加与删除操作原创 2020-06-07 23:25:24 · 152 阅读 · 0 评论 -
好玩的数据结构与算法——单链表面试题
单链表面试题:求单链表中有效节点的个数查找单链表中的倒数第 k 个结点 【新浪面试题】单链表的反转【腾讯面试题】从尾到头打印单链表 【百度,要求方式 1:反向遍历 。 方式 2:Stack 栈】合并两个有序的单链表,合并之后的链表依然有序1.求单链表中有效节点的个数思路:有效节点指的是含有数据的节点,不算头节点。只需要从头开始遍历就好/** * @Description: getLinkListLength 查询单链表的长度 */public static int getLin原创 2020-06-07 12:53:56 · 235 阅读 · 0 评论 -
好玩的数据结构与算法——单链表
单链表链表在内存中的示意图链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表的逻辑结构示意图单链表实例4.直接添加直接添加到单链表的尾部.代码实现: /** * @Description: 添加节点 * 思路: * 1.先找到当前链表的最后节点 * 2.将最后这个节点的next域指原创 2020-06-03 10:06:48 · 161 阅读 · 0 评论 -
好玩的数据结构与算法————数组实现队列和循环队列
队列:队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出单向队列:front:指向队列头部,front是指向队列头部的前一个位置rear:指向队列尾的数据当我们将数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:思路分析将尾指针往后移:rear+1 , 当 front == rear 【空】若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear 所指的数组元素中,原创 2020-05-19 10:30:57 · 234 阅读 · 0 评论 -
好玩的数据结构与算法学习————稀疏数组
在编写五子棋程序中,有存盘退出和续上盘的功能。使用二位数组记录则会产生很多的无用数据。如图:这样就会有很多的0占用空间,解决这个问题的方法是将其转换为稀疏数组。例如:第一行记录依次为:原数组的行数、列数、有多少非0值第二行开始是记录每一个非0的数字在原数组中的位置。那么题目中的稀疏数组就是:转换为稀疏数组之后需要进行保存到文件中。整体思路如图:使用代码实现如下:public class SparseArray { public static void main(String原创 2020-05-16 21:02:26 · 268 阅读 · 0 评论