基于javascript的数据结构
文章平均质量分 50
读《学习JavaScript数据结构与算法》一书有感
竹箫云淡
愿得一人心,白首不分离
展开
-
基于javascript的插入排序与希尔排序
公共方法 // 判断 a 是否大于 b function isBig(a, b) { return a > b } // 交换data数组中的两个索引数据 function exch(data, i, j) { const tmp = data[i]; data[i] = data[j]; data[j] = tmp; } 基础的插入排序 以数组数字,升序为例: 思想:从索引为1开始,并以单位为1开始递进,循环比较当前元素与前一个元素的大小,跳出条件为 不小于。不小于,意味着,该元素的左侧原创 2022-02-19 09:25:53 · 101 阅读 · 0 评论 -
基于javaScript的数据结构之字典及散列表
上章节,使用javascript简单实现了集合的数据结构。而此篇实现的字典,在结构上与上章的集合很相似,只不过两者存储的数据内容略有不同。然而,为什么会有这两种不同的数据结构呢?是因为字典获取值比较快吗?这个暂时还想不明白。但是对于散列表来说,它使用hashCode最为键来保存数据,而JavaScript语言内部,就是使用散列表来表示每个对象的。感觉这类似于数组取值的方法。本章节,我是带着问题来实现字典结构的,想不明白,为什么要分集合、字典两种?难道就是因为各自类具有不同的方法吗。。。一下就是本次的代码:原创 2021-12-08 20:45:18 · 653 阅读 · 0 评论 -
基于javaScript的数据结构之集合
集合 集合,是一组无序且唯一的数据集。在计算机的数据结构中,集合,处理是有限的之外,其概念与数学中的概念基本是一样的。 目前ES6语法中,有个Set类,与本篇要实现的集合的功能是一致的,但是,本篇处理实现Set类中的方法之外,扩展了集合的基本运算:交集、差集、并集、是否子集。代码如下: function CustomSet() { this.items = {}; // 添加元素 CustomSet.prototype.add = function (ele) { if (!t原创 2021-11-27 09:54:09 · 458 阅读 · 0 评论 -
基于javaScript的数据结构之链表
链表 基于栈和队列解构,我们可以发现,这两种结构虽然读取数据时是非常优秀的。但是它在数组的起点或中间进行插入或删除数据时,成本很高。虽然在js中,我们(开发者)不像java那样,需要手动对数组进行扩容操作,但是这种操作在js底层还是要做的。那么,对于这种新增或删除的操作,有没有另一种高效率的存储结构呢?那肯定是有的,比如,本次分享的链表这种数据结构。链表的结构,有很多种,比如:基础链表(单向链表)、双向链表、循环列表、排序链表等。故名思意,不同结构的链表,可以更好的实现不同的功能。下图,是针对单向链表的示原创 2021-11-22 22:07:04 · 704 阅读 · 0 评论 -
基于javaScript的数据结构之队列
队列 队列与栈结构类似,不同的在于一个(队列)是先进先出(FIFO),一个(栈)是后进先出(LIFO)。抽象示意图: 这种结构,类似与菜市场排队买菜很类似,要实现这种数据结构,在javaScript中同样有两种方式,第一种基于数组的实现,这里不再赘述,仅以基于对象进行实现,中间的实现过程略微不同。 基于javaScript对象实现基本的队列 let queue = new Queue(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); fun原创 2021-11-14 14:08:24 · 697 阅读 · 0 评论 -
基于javaScript的数据结构之栈结构
栈结构 栈,遵循后进先出(LIFO:last in fist out)的规则,这一规则与数组的的push、pop方法很像。所以我们可以利用数组中的这两个方法来实现栈结构. 基于数组实现栈结构 function Stack(){ this.list = []; // 进栈 Stack.prototype.push = function(item){ this.list.push(item); } // 出栈 Stack.prototype.po原创 2021-11-14 10:48:06 · 1023 阅读 · 0 评论