![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 85
懒惰的小白521
这个作者很懒,什么都没留下…
展开
-
数据结构与算法(第一章 内容简介)
1.1、数据结构与算法的重要性 算法是程序的灵魂,优秀的程序可以在海量 数据计算中,依然保持高速计算 一般来讲,程序会使用内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核心功能是哪个部分呢? 拿实际工作经历来说,在Unix下开发服务器程序,功能是要支持上千万人同时在线,在上线前,做内侧,一切OK,可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。 目前程序员面试的门槛越原创 2021-03-13 17:33:01 · 240 阅读 · 0 评论 -
数据结构与算法(第十三章 图)
13.1 图基本介绍原创 2021-05-25 22:06:17 · 105 阅读 · 0 评论 -
数据结构与算法(第十二章 多路查找树)
12.1 二叉树与 B 树 12.1.1 二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就 存在如下问题: 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时, 速度有影响 问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度. 12.1.2 多叉树 在二叉树中,每个节点有数据项,最多有两个子节点。如果允许翻译 2021-05-25 13:14:04 · 107 阅读 · 1 评论 -
数据结构与算法(第十一章 树结构的实际应用)
11.1堆排序 11.1.1堆排序基本介绍 (1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。 (2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 (3) 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 (4)大顶堆举例说明 我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子: 大顶堆特点:翻译 2021-05-25 13:00:26 · 219 阅读 · 0 评论 -
数据结构与算法(第十章 树结构的基础部分)
10.1二叉树 10.1.1为什么需要树这种数据结构 (1)数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。 @操作示意图如下: (2)链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。 缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) @操作示意图如下: (3)树原创 2021-05-20 22:15:00 · 176 阅读 · 0 评论 -
数据结构与算法(第九章 哈希表)
9.1哈希表(散列)-Google上机题 (1)看一个实际需求,google 公司的一个上机题: (2)有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的 id 时,要求查找到该员工的 所有信息. (3)要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列) 9.2哈希表的基本介绍 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录原创 2021-05-13 21:52:16 · 175 阅读 · 0 评论 -
数据结构与算法(第八章 四类查找算法)
在java中,我们常用的查找算法有四种: (1)顺序(线性)查找 (2)二分查找/折本查找 (3)插值查找 (4)斐波那契查找 8.1线性查找算法 有一个数列:{1,8,19,3,1000},判断数列中是否包含此名称【顺序查找】要求:如果找到了,就提示找到,并给出下标值 @思路: 遍历如果找到符合条件的值就返回 public class SeqSearch { public static void main(String[] args) { int[] arr={23,1,78,9,原创 2021-05-13 20:23:29 · 280 阅读 · 0 评论 -
数据结构与算法(第七章 八大排序算法--堆排序在后面章节)
7.1冒泡算法 7.1.1基本介绍 (1)冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。 (2)优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行) 7.1.2演示冒泡过程的例原创 2021-05-11 22:26:19 · 229 阅读 · 4 评论 -
数据结构与算法(第六章 排序算法的简介)
6.1排序算法的介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,按照指定的顺序进行排列的过程。 6.2排序的分类 (1)内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。 (2)外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。 (3)常见的排序算法分类(如图) 6.3算法的时间复杂度 6.3.1度量一个程序(算法)执行时间的两种方法 (1)事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评翻译 2021-05-02 15:51:44 · 224 阅读 · 1 评论 -
数据结构与算法(第五章 递归)
5.1递归应用场景 迷宫问题(回溯),递归(Recursion) 5.2递归概念 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可让代码变得简洁。 5.3递归调用机制 (1)打印问题 (2)阶乘问题 (3)图解说明递归调用机制 代码演示: package com.atguigu.recursion; public class RecursionTest { public static void main(String[] args) { // TODO原创 2021-03-23 15:24:52 · 151 阅读 · 0 评论 -
数据结构与算法(第四章 栈)
4.1栈的一个实际需求 计算一个表达式 计算表达式:【722-5+1-5+3-3】点击计算【如下图】 此例并不是简单的把算式列出计算,而是考虑计算机是如何对这个式子进行解析并运算的,这就引出问题的关键--------栈。 5.2栈的介绍 (1)栈的英文为(stack) (2)栈是一个先入后出(FILO-First In Last Out)的有序列表 (3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为原创 2021-03-23 13:34:30 · 1189 阅读 · 0 评论 -
数据结构与算法(第三章 链表)
3.1链表(Linked List)介绍 链表是有序的列表,但是它在内存中存储如下: 小结上图: 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 @单链表(带头结点)逻辑结构示意图如下 3.2单链表的应用实例 使用带head头的单向链表实现 -水浒英雄排行榜管理完成对英雄人物的增删改查操作。 (1)第一种方法在添加英雄时,直接添加到链表的尾部 思路分析示原创 2021-03-21 14:39:56 · 145 阅读 · 0 评论 -
数据结构与算法(第二章 稀疏数组和队列)
3.1稀疏sparsearray数组 3.1.1关于稀疏数组的实际需求 3.1.2基本介绍 1.当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 2.稀疏数组的处理方式是: (1)记录数组一共有几行几列,有多少个不同的值 (2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 3.稀疏数组举例说明 ...原创 2021-03-18 22:35:18 · 130 阅读 · 0 评论