Javascript数据结构与算法
前端小白的江湖路
这个作者很懒,什么都没留下…
展开
-
二叉搜索树(Binary Search Tree)
二叉搜索树,也叫做二叉排序树。这种结构查找元素非常的高效。在JS里面构建这种结构,有2种方法1)通过嵌套的对象 2)通过嵌套的数组下面我们给出嵌套的对象来实现这种结构/* 二叉搜索树,二叉排序树,Binary Search Tree 这里我们使用嵌套的对象(nested object)*/function BinarySearchTree() { var Node原创 2017-10-05 20:20:20 · 455 阅读 · 0 评论 -
单链表的实现
这节我们实现一个单链表,有详细的注释。之前贴出代码好了/* 链表数据结构的实现*/function LinkedList() { var Node = function (element) { this.element = element; this.next = null; } var length = 0; var head = null; /*向列表原创 2017-10-03 17:08:53 · 254 阅读 · 0 评论 -
单链表练习1--去重
在进行单链表去重之前,我们先来考虑一下,数组如何就地去重。我们可以很容易的编写出这样的代码:如果通过正向遍历来删除的话,就要注意控制遍历的长度。function arrRemoveRepeatFront(arr) { for(var i=0; i<arr.length; ++i) { if(arr.indexOf(arr[i]) < i) { arr.splice(i, 1原创 2017-10-04 15:08:28 · 537 阅读 · 0 评论 -
单链表练习2--倒置或者翻转
单链表的倒置,就是将单链表翻转过来,最后一个节点当成是第一个节点,以此类推。重新生成一个新的链表,只在第0个位置插入可以实现/*测试函数*/function test(arr) { var link_list = new LinkedList(); for(var i=0; i<arr.length; ++i) { link_list.append(arr[i]); }原创 2017-10-04 15:35:45 · 335 阅读 · 0 评论 -
集合的实现1--使用对象
集合: 无序不重复/* Set 集合:不重复并且无序*/function Set() { var items = {}; /*集合中添加一个元素*/ this.add = function(value) { if(!this.has(value)) { items[value] = value; return true; } return f原创 2017-10-04 17:22:21 · 261 阅读 · 0 评论 -
集合的实现2--使用数组
上节我们使用了对象来实现集合类,这节我们使用数组来实现同样的功能/* 使用数组来模拟集合*/function Set(arr) { var items = []; this.add = function (value) { if(this.has(value)) { return false; } items.push(value); return true原创 2017-10-05 11:15:34 · 302 阅读 · 0 评论 -
集合的实现3--ES6的set类型
ES6也实现了Set类型。ES6入门之set和map我们看到var set = new Set([1, 2, 2, 3, 3]);console.log(set);我们也可以稍微修改一下程序。使之可以接受参数。看下面的bold文本部分。由于使用的是函数表达式(对应的是函数声明)。因此代码得放在合理的位置/* 使用数组来模拟集合*/functio原创 2017-10-05 14:55:54 · 305 阅读 · 0 评论 -
对字典类型的扩充
想不通,为什么《学习Javascript数据结构与算法》为什么会设计这样的一小节仅仅是对原生的功能稍微扩充了一下。不说了,为了保持完整性,把代码贴出来吧/* 使用字典来存储唯一值*/function Dictionary() { var items = {}; /*向字典中添加元素, 或者更新一个元素*/ this.set = function (key, value) {原创 2017-10-11 20:42:34 · 508 阅读 · 2 评论 -
常用排序算法1--冒泡排序,选择排序,插入排序
我们先不分析排序算法的复杂度和稳定性,着重实现一遍所有的排序算法。然后另起一篇简单的分析一下/*Sort and search method*/function ArrayList() { var arr = []; this.insert = function (value) { arr.push(value); } this.toString = function (原创 2017-10-25 21:14:32 · 252 阅读 · 0 评论 -
有序数组归并和有序单链表归并
学归并排序算法的时候,先要了解归并有序数组。顺便写个有序单链表的归并/*有序数组的归并*/function mergeArr(arr1, arr2) { var result = [], arr1_index = 0, arr2_index = 0; while(arr1_index < arr1.length && arr2_index < arr2.lengt原创 2017-10-26 17:12:35 · 534 阅读 · 0 评论 -
栈的应用4--中缀表达式转换为后缀表达式
先占个坑原创 2017-10-03 12:35:38 · 209 阅读 · 0 评论 -
循环队列--击鼓传花或者叫烫手的山芋(hot potato)
之前我们已经实现了一个Queue的构造函数。这里使用它来模拟一个击鼓传花的游戏。function hotPotato(name_list, num) { var queue = new Queue(); for(var i=0; i<name_list.length; ++i) { queue.enqueue(name_list[i]); } var eliminated = "原创 2017-10-03 12:56:27 · 2314 阅读 · 0 评论 -
单链表的实现扩充
之前我们用2种方法实现了单链表,现在我们将再增加一种方法。function LinkedList() { var Node = function (value) { this.value = value; this.next = null; } var head = null; var length = 0; /* 1)使用一个辅助函数来实现递归*/ this.ap原创 2017-10-08 16:45:15 · 1884 阅读 · 0 评论 -
二分查找(binary search)
二分查找,也叫做折半查找,或者叫二分搜索。这个算法要求被搜索的数据结构已经排序。比起顺序查找要快很多用递归我们可以很容易的写出这样的算法function binarySearch(value, arr) { var mid = Math.floor(arr.length / 2); if(arr[mid] == value) { return mid; } if(arr[原创 2017-10-08 19:47:14 · 353 阅读 · 0 评论 -
栈的实现
实现简单,不多解释了,使用数组来保存数据function Stack () { var items = []; //入栈 this.push = function (item) { items.push(item); } // 出栈 this.pop = function () { return items.pop(); } // 返回栈顶的元素 this.pe原创 2017-10-02 12:22:31 · 261 阅读 · 0 评论 -
栈的应用1--圆括号平衡
圆括号平衡,这里可以看相关的问题描述python数据结构与算法 5栈的应用之圆括号平衡主要关心代码的实现,/*平衡圆括号*/function isBracketBalanced(str) { /* @str:圆括号字符串,比如 "()()" "(()()())" 平衡 "(()" 非平衡, 左括号较多 "(()))))" 非平衡,右括号较多原创 2017-10-02 12:41:44 · 1644 阅读 · 0 评论 -
栈的应用3--进制转换
进制转换可以使用使用取余法来实现基本上是学习编程最常见的一个练习。学习几个基本的单词被除数: dividend除数: divisor商: quotient余数: remainderfunction numberConversion(num, base) { var stack = new Stack(); var base_str = "0123456789原创 2017-10-02 14:34:10 · 270 阅读 · 0 评论 -
栈的应用2--通用括号平衡
上节我们实现了圆括号的匹配但实际上我们可以实现任意多种括号的匹配。考虑这样的匹配 {[](){}[]()} 。我们只需要在弹出栈的时候判断一下对应关系即可 /* 通用括号匹配*/function generalBracketBalanced(str) { var stack = new Stack(); var types = { "(": ")", "原创 2017-10-02 14:29:19 · 328 阅读 · 0 评论 -
优先队列的实现
我们在排队的时候,经常会按照优先级为队列进行排序下面给出一种优先级队列/*优先队列*/function PriorityQueue() { var items = []; /* 这里我们使用数字来定义优先级, 数字小的优先级高。0 的优先级大于1的优先级 同等优先级。先进入队列的排在前面 */ var QueueElement = function (value,原创 2017-10-03 12:38:56 · 318 阅读 · 0 评论 -
队列的实现
同样适用数组来模拟队列/* Queue class*/function Queue() { var items = []; /*入队*/ this.enqueue = function (value) { items.push(value); } /*出队,出列*/ this.dequeue = function () { return items.sh原创 2017-10-03 12:37:32 · 235 阅读 · 0 评论 -
常用排序算法2--归并排序和快速排序
function ArrayList() { var arr = []; this.insert = function (value) { arr.push(value); } this.toString = function () { return arr.join(" "); } /*归并排序*/ this.mergeSort = function () { a原创 2017-10-26 20:49:21 · 299 阅读 · 0 评论