
数据结构与算法
不会爬墙的岛田
这个作者很懒,什么都没留下…
展开
-
数据结构学习笔记(七):图的深度优先和广度优先算法
数据结构学习笔记(六):图的深度优先和广度优先算法一、概述 图是一种数据结构,其中结点可以具有0个或者多个相邻的元素,两个结点之间的连接称为边。结点也可以称为顶点。二、图的表示方法邻接矩阵邻接矩阵中,1表示两个结点相连通,0表示两个结点不连通。如图中0和1,2,3连通,故矩阵中(0,1)(0,2)(0,3)为1,其余不相通的位置为0。邻接表三、创建图的邻接矩阵 实现代码:public class Graph { private int numsOfEdges;原创 2020-05-15 13:50:50 · 578 阅读 · 0 评论 -
数据结构学习笔记(六):哈希表
数据结构学习笔记(六):哈希表 哈希表是根据关键码值而直接进行访问的数据结构。也就是说它通过关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表的具体框架如下图所示: 哈希表的组成通常为数组+链表或者数组+二叉树,本文以链表为例。接下来将结合一个具体的题目来实现哈希表的代码。题目如下:有一个公司,当有新员工来报道时,要求将该员工的信息加入(编号,姓名),当输入该员工的编号时,要求查找到该员工的所有信息。要求不使用数据库,速原创 2020-05-12 23:00:28 · 148 阅读 · 0 评论 -
算法学习笔记(三):归并排序、基数排序、堆排序
算法学习笔记(三):归并排序、基数排序、堆排序归并排序 归并排序是利用归并思想,先将数组拆分成一个又一个小元素,再对其进行“治”,即将其排序,最后合成一个有序的序列。如图所示: “治”阶段以最后一次“治”阶段为例分析,我们需要将两个已经有序的子序列合并成一个有序序列,步骤如下: 可以看到,大致步骤分为三步:1. 对比左右两部分的各位数字,将较小的数字放入临时数组;2. 在一方全部放完之后,将另一方剩余的元素(已排序)按序放入临时数组;3. 将临时数组中的元素拷贝进原数组。原创 2020-05-11 10:25:44 · 262 阅读 · 0 评论 -
数据结构学习笔记(五):二叉树
树的概念 树有很多种,每个节点最多只能由两个子节点的一种形式称为二叉树,二叉树的子节点分为左节点和右节点。 如果该二叉树的所有叶子节点都在最后一层,并且结点总书=2^n-1,n为层数,则我们称为满二叉树。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvdPLd85-1589035382314)(C:\Users\hasee\Desktop\数据结构\二叉树\微信截图_20200429201418.png)] 如果该二叉树的所有叶子节点都在最后一层或者倒数第二层原创 2020-05-09 22:38:59 · 282 阅读 · 0 评论 -
算法学习笔记(二):快速排序,插入排序和希尔排序
算法学习笔记(二):快速排序,插入排序和希尔排序快速排序 思想:比大小,再分区。 从一个数组中取出一个数作为基准数,再将比这个数大或等于的数全部放在他的右边,将小于他的数全部放在其左边,再对左右两个区间重复第二步,直到各个区间只剩一个数,此时排序完成。 实现代码:public class QuickSort { int index; public void qui...原创 2020-05-05 21:12:36 · 218 阅读 · 0 评论 -
算法学习笔记(一):时间复杂度、冒泡排序、选择排序和二分排序
时间复杂度 1. 时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行的次数多,它花费的时间就多。一个算法中语句执行次数被称为语句频度或时间频度T(n)。 特性:忽略常数项:如时间频度为T(n) = 2n+20和频度为T(n) = 2n,当n越来越大是,两者的结果无限接近。故常数项可以忽略;忽略低次项:如时间频度为T(n) = 2n^2+3n+10与...原创 2020-05-05 10:47:20 · 431 阅读 · 0 评论 -
数据结构学习笔记(一):稀疏数组
数据结构学习笔记(一):稀疏数组 一、 稀疏数组的概念 例如,五子棋程序中,有存盘推出和续上盘的功能。如果要实现这个功能,最简单的方法就是用二维数组储存。如下所示 可是该二维数组中很多值是0,因此记录了很多没有意义的数据。因此可以用到稀疏数组来对二维数组进行压缩。 当一个数组大部分元素为0,或者为同一个值的时候,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1....原创 2020-04-16 22:30:10 · 488 阅读 · 0 评论 -
数据结构学习笔记(二):队列
一、队列介绍 队列是一个有序列表,可以用数组或链表来实现。 队列遵循先进先出的原则,即先存入队列的数据要先取出,后存入的要后取出,如图所示: 因为队列的输出、输入时分别从前后端来处理,因此需要两个变量front和rear分别记录队列的前后端下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。 因此,创建队列时,我们需要考虑四个功能: 1.接收数据进入队...原创 2020-04-18 13:09:16 · 236 阅读 · 0 评论 -
数据结构学习笔记(三续):单链表常见面试题
数据结构学习笔记(三续):单链表常见面试题一、查找单链表中倒数第K个节点 思路:先找出单链表中有效节点的个数length,再通过length-K找到倒数第K个节点,但是要注意头节点不算在内。//获取链表中有效节点的个数 public int getLen(HeroNode hero){ HeroNode temp = head.next; int l...原创 2020-04-21 16:53:46 · 153 阅读 · 0 评论 -
数据结构自学笔记(三):单双向链表及环形链表
数据结构自学笔记(三):链表单链表一、概述 链表是有序的列表,但是它在内存中是如下方式来存储: 二、特点链表是以节点的方式储存;每个节点包含data域,next域,指向下一个节点;链表的每一个节点不一定是连续存放的;链表分带头节点的链表和没有头节点的链表,根据实际需求来确定。三、单链表的创建和添加 3.1添加链表元素时,直接添加到链表尾部;(无序链表)先创建一个...原创 2020-04-22 21:50:32 · 205 阅读 · 0 评论 -
数据结构学习笔记(四):栈
一、概述栈是一个先入后出的有序列表;栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固定的一端,称为栈底。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素正好相反,最后放入的元素最先删除,最先放入的元素最后删除。二、代码实现public class ArrayStack {...原创 2020-04-28 23:21:02 · 194 阅读 · 0 评论