首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
数据结构与算法基础
神奇的程序员
创建于2021-06-16
订阅专栏
数据结构与算法基础学习系列总结与解析文章
等 30 人订阅
共19篇文章
创建于2021-06-16
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
深度优先搜索的理解与简单实现
深度优先搜索作为广度优先搜索的好基友,同样也是对图进行搜索的一种算法。善用这两种算法,可以解决我们业务中遇到的「树形结构遍历搜索」问题。 本文将以图文的形式,详细讲解深度优先搜索,将其与广度优先搜索进行对比,分析两种算法的差异,并用JavaScript将其实现,欢迎各位感兴趣的…
广度优先搜索的理解与简单实现
本文将以图文的形式,详细讲解广度优先搜索,并用JavaScript将其实现,完成上面所描述的问题,欢迎各位感兴趣的开发者阅读本文。 广度优先搜索是一种对图进行搜索的算法。 假设我们一开始位于某个结点(即起点),此时并不知道图的整体结构,而我们的目的是从起点开始顺着边搜索,直到到…
图的认识
什么是图?它能用来干嘛?本文将以图文的形式带你解答上述疑惑,欢迎各位感兴趣的开发者阅读本文。 如下图所示,圆圈叫做顶点(结点),连接顶点的线叫做“边”,也就是说,由顶点和连接每对顶点的边所构成的图形就是图。 图可以变现社会中的各种关系,使用起来非常方便。假设我们要举行一场活动,…
数组查找: 线性查找与二分查找
本文将通过图文形式,详细讲解线性查找与二分查找,并用JavaScript将其实现,欢迎各位感兴趣的前端开发者阅读本文。 线性查找是一种在数组中查找数据的算法,从数组的头部开始按顺序往下查找即为线性查找。 从数组的最左边开始查找,将其与6进行比较,如果结果一致,查找便结束,不一致…
排序算法:快速排序优化 => 三路快排的理解与实现
在上一篇文章《排序算法:快速排序的理解与实现》中,我按照书中所描述的思路将其实现后,大家看了我的文章后提醒我,我的那个排序算法的实现不是最优的,非原地快排,会造成额外的内存浪费,同时性能也不是很好。 从序列中随机找一个基准值(piovt),移动序列中的元素进行分区,将小于基准值…
排序算法:快速排序的理解与实现
快速排序算法:首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数” 和 “比基准值大的数”这两个类别。再将其排列成以下形式 接着,分别对基准值两边的数组进行快速排序,直至基准值的左侧只有一个数据,则排序完成。 如图所示,我们使用快速排序…
排序算法:归并排序的理解与实现
归并排序与堆排序的时间复杂度都为O(nlogn),这两种算法的应用场景较为广泛,本文采用图文形式详细讲解归并排序的实现思路,并用JavaScript将其实现,欢迎各位感兴趣的前端开发者阅读本文。 归并排序算法会将序列分成长度相同的两个子序列,当无法继续往下分时(每个子序列都只有…
排序算法:堆排序的理解与实现
堆分为两种: 最大堆和最小堆,两者的差别在于节点的排序方式。 用数组来实现堆,堆中的节点在数组的位置与它的父节点以及子节点的索引之间有一个映射关系。 若计算出的索引大于数组的长度,则当前节点没有子节点。 堆是一个完全二叉树,树的高度是指从树的根节点到最低叶节点所需要的步数。 树…
排序算法:插入排序
从序列左端开始依次对数据进行排序的算法称为插入排序。 从未排序区域中,取出最左侧的数字3,将它与已排序区域的数字进行比较。 若左边的数字更大,就交换这两个数字,重复该操作,直到左边已归位的数字比取出的数字更小,或者取出的数字已经被移到整个序列的最左边为止。 5>4,所以交换这两…
排序算法:选择排序
选择排序,作为经典的排序算法。与冒泡排序一样,在面试中也常常会被问到,如果你没有掌握,那面试也就结束了😅 从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换,重复这一操作的算法即选择排序。 重复上述操作,直至比较到序列的最后一个元素。 用序列的1号元素与其之后的元素进…
排序算法:冒泡排序
当面试官问你什么是排序算法?请你用JavaScript实现一个简单的冒泡排序,如果你没掌握,就会被问住。 从序列的最右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置,重复这一操作的算法即冒泡排序。 如果比较的数据比左边相邻的数据小,则左移当前比较的数据。 直至当前比…
数据结构:二叉查找树
二叉查找树是一种数据结构,采用了图的树形结构,数据存储于二叉查找树的各个结点中。 二叉查找树又叫二叉搜索树或二叉排序树。 如图所示,即为一个二叉查找树的示例。 若删除的结点有多个子结点,则先删除目标结点,然后在被删除结点的左子树中寻找最大结点,最后将最大结点移到被删除结点的位置…
数据结构:堆
堆是一种图的数据结构,被用于实现“优先队列”。 优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺序取出。在堆的树形结构中,各个顶点被称为“结点(node)”,数据就存储在这些节点中。 如图所示,取出堆中的数字1。 数字6结点的子结点3和5,3为较小者。故…
数据结构:哈希表
哈希是由键(key)和值(value)组成的数据。 使用哈希函数(Hash)计算Joe的值,即字符串"Joe"的哈希值。得到的结果是4928 将得到的哈希值处以数组的长度5,求得其余数。这样的操作叫"mod运算"。此处mod的运算结果为3 将Joe进行mod运算的值作为数组下标…
数据结构:栈与队列
何为栈?何为队列?先进先出和后进先出的区别,本文就跟大家分享下栈与队列这两种数据结构的优缺点以及适用场景,欢迎各位感兴趣的开发者阅读本文。 栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。 由于栈中存放数据的结构是后放进去的数据先取出来(后进先…
数据结构:数组的基础知识
由于数据是存储在连续空间内,所以每个数据的内存地址都可以通过数组下标算出,我们就可以通过下标直接访问目标数据(随机访问)。 将数据添加到数组的任意位置,需要在数组的末尾增加新的存储空间,为了给新数据腾出位置,要把已有数据一个个移开,最后在空出来的要添加元素的位置写入要添加的新数…
数据结构:链表的基础知识
不仅可以从前往后,还可以从后往前遍历数据。 文中使用的图片源自《我的第一本算法书》,如若侵权,请评论区留言,作者立即删除相关图片。
数据结构与算法基础知识💧
逻辑结构指的是数据间的关系,而存储结构是逻辑结构用计算机语言的实现。常见的存储结构有:顺序存储、链式存储、索引存储、散列存储。 计算机擅长告诉执行一些基本命令,但无法执行复杂的命令。此处的"基本命令"指的是"做加法"或者"在指定的内容低智商保存数据"等。 计算机是以这些基本命令…
前端如何学习数据结构与算法🎓
作为一个对算法没有任何认知,非科班出身的前端程序员,如果想提高自己的能力,不再只写业务代码当一个应用工程师,算法是必须掌握的一门本领。算法也是一种思想,当你去读一些优秀框架的源码,如果对算法和数据结构一无所知,读起来很困难,你无法理解人家为什么要那样写,那样写的好处是什么,接下…