<数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115363398 上架时间:2014-8-5 出版日期:2014 年8月 开本:16开 版次:1-1 所属分类:计算机 > 软件与程序设计 > 网络编程 > javascript 更多关于>>> <数据结构与算法JavaScript描述> 编辑推荐 随着…
导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数.然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串.在内部被归类为数组.由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用. 使用数组: 1.创建数组 使用 [] 操作符 ,var a…
<数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数.然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串.在内部被归类为数组.由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用. 使…
实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); booklist.append('htmlbook'); console.log(booklist.length()) //3 console.log(booklist.toString()) //["jsbook", "cssbook", "htmlbook&quo…
最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { var min, temp; for (var outer = 0; outer <= this.dataStore.length - 2; ++outer) { min = outer; for (var inner = outer + 1; inner <= this.dataStore.le…
数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得…
本书看完,对常见的数据结构与算法从概念上有了更深入的理解. 书中关于数组.栈和队列.链表.字典.散列.集合.二叉树.图.排序.检索.动态规划.贪心算法都有详细的介绍.算是一本不错的学习书籍. 栈和队列:都可以通过数组来模拟.栈的规则是先进后出,队列的规则是先进先出. 链表:有双向与单向链表之分,默认有一个头指针,指向下一个节点,就像链条一样. 数组 vs 链表: 数组查找速度快:数组能够通过索引快速找到一个元素,高效快速.而链表没有索引,查找不是很便捷. 链表增加.删除性能高:数组增加.删除一个…
“平淡无奇”,一句话总结. 当初买这本书的原因,在意的是有没有什么令人惊喜的东西,特别是针对Javascript代码的奇思妙想,所以就买下了这本书. 在买的几本书里面,最先看的也是这一本,但看起目录就觉得不大妙,翻起内容时候,才发现真不是那么的新奇的东西,甚至来说几乎不关Javascript的事. 我知道作者讲的是数据结构思想的东西,但是真跟Javascript没关系.作者几乎是把C语言算法的那一套搬到Javascript,看得我直满满都是C语言的影子.我不是排斥Javascript来讲算法的东…
1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中的第一个人组成舞伴.他们身后的人各自向前移动一位,变成新的队首.当一对舞伴 迈入舞池时,主持人会大声喊出他们的名字.当一对舞伴走出舞池,且两排队伍中有任意 一队没人时,主持人也会把这个情况告诉大家. 为了模拟这种情况,我们把跳方块舞的男男女女的姓名储存在一个文本文件中:   下面是程序代码的实现:…
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要将数组中的其他元素向前或向后平移,以反映数组刚刚进行了添加或删除操作. 然而,JavaScript 的数组并不存在上述问题,因为使用splice() 方法不需要再访问数组中的其他元素了.   JavaScript 中数组的主要问题是,它们被实现成了对象,与其他语言(比如C++ 和Java)的数组相比…
注:澄清一个bug: /** * 删除队首的元素: */ function dequeue(){ return this.dataStore.shift(); } 应该有return:   队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素. 队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反而被优先处理. 可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止.   队列是一种先进先出的数据结构. 队…
有一些问题特别适合用栈来解决.本节就介绍几个这样的例子.   1) 数制间的相互转换 可以利用栈将一个数字从一种数制转换成另一种数制.假设想将数字n 转换为以b 为基数的数字,实现转换的算法如下. 使用栈,在JavaScript 中实现该算法就是小菜一碟.下面就是该函数的定义,可以将数字转化为二至九进制的数字: //============================使用Stack类==================================== /** * 1.数制间的相互转换 *…
栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题. 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用.   1.对栈的操作: 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶. 栈被称为一种后入先出的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问. 为了得到栈底的元素,必须先拿掉上面的元素. 对栈的两种主要操作是将一个元素压入栈和将…
二叉树和二叉查找树 概念 树是一种非线性的数据结构,以分层的方式存储数据. 树被用来存储具有层级关系的数据,比如文件系统的文件: 树还被用来存储有序列表. 一棵树最上面的节点称为根节点. 如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子节点. 一个节点可以有0个.1个或多个子节点. 没有任何子节点的节点称为叶子节点. 二叉树是一种特殊的树,它的子节点个数不超过两个. 二叉树具有一些特殊的计算性质,使得在它们之上的一些操作异常高效. 以某种特定顺序访问树中所有的节点称为树的遍…
集合 Set 概念 (跟高中时数学课上学的集合几乎一模一样哦哈哈) 集合是一种包含不同元素的数据结构. 集合中的元素称为成员. 集合的两个最重要的特性: 集合中的成员是无序的. 集合中不允许相同成员存在. 空集:不包含任何成员的集合. 全集:包含一切可能成员的集合. 如果两个集合的成员完全相同,则称两个集合相等. 如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集. 对集合的操作: 并集:将两个集合中的成员进行合并,得到一个新集合. 交集:两个集合中共同存在的成员组成一个新…
散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列使用的数据结构叫做散列表. 在散列表上插入.删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大值和最小值. ----------------------- 这章看完了比较晕乎,心里不明白散列有什么特别的用处,或者说更适合哪种场景下用. 额,暂时存疑吧.先欠着,等回过头来再看看,理解了再补充…
字典 字典是一种以键-值对形式存储数据的数据结构. Dictionary 类 Dictionary 类的基础是Array 类,而不是Object 类. function Dictionary( ){ this.dataStore = []; // 后面为了给字典增加排序功能,所以此处用数组来实现存储 this.add = add; this.remove = remove; this.find = find; this.showAll = showAll; this.count = count;…
队列 Queue 概念 队列是一种列表,但队列只能在队尾插入元,在队首删除元素. 队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客. 可以将队列想像成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止. 对队列的操作 向队列中插入新元素(入队):push( ) 删除队列中的元素(出队):pop( ) 读取队头的元素: peek( ) 用数…
栈 Stack 概念 栈是一种高效的数据结构,数据只能在栈顶添加或者删除,所以这样的操作很快,而且容易实现.栈的使用遍布程序语言的方方面面,从表达式求值到处理函数调用. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶. 对栈的操作 将一个元素压入栈(入栈):push( ) 将一个元素弹出栈(出栈):pop( ) 预览栈顶的元素:peek( ) 栈的实现 function Stack() { this.top = 0; this.dataStore = []; this.pu…
第一章JavaScript的编程环境和模型 1.2JavaScript编程实践 1.2.1 声明和初始化变量 JavaScript中的变量默认为全局变量,如果初始化未被声明的变量,该变量就成了一个全局变量. javascript中使用关键字var声明初始化变量.  var 变量名:   var 变量名=初始化值: 例如: var name; var number=10; var text="Hellow World"; var bool=false; 1.2.2 Javascript中…
1.列表的抽象数据类型定义   2.实现列表类: 2.1 append:给列表添加元素: 2.2 remove: 从列表中删除元素: 2.3 find方法: 2.4 length:列表中有多少个元素: 2.5 toString:显示列表中的元素 2.6 insert:向列表中插入一个元素 2.7 clear:清空列表中所有的元素 2.8 contains:判断给定值是否在列表中 2.9 遍历列表 front.end.prev.next:一组方法允许用户在列表上自由移动:getElement()返…
链表 概念 链表是由一组节点组成的集合. 每个节点都使用一个对象的引用指向它的后继. 指向另一个节点的引用叫做 链. 许多链表的实现都在链表最前面有一个特殊节点,叫做头节点. 链表的尾元素指向一个null节点. 与数组的对比: js中的数据被实现成了对象,与其他语言(比如C++和Java)的数组相比,效率很低. 如果你发现数组在使用时很慢,就可以考虑使用链表来代替它. 除了对数据的随机访问,链表几乎可以用在任何可以使用一维数组的情况中. 如果需要随机访问,数组仍然是更好的选择. 设计一个基于对象…
序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录下来吧 git代码下载:https://github.com/JsAaron/data_structure.git   栈结构 特殊的列表,栈内的元素只能通过列表的一端访问,栈顶 后入先出(LIFO,last-in-first-out)的数据结构   javascript提供可操作的方法, 入栈 p…
前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是<数据结构与算法C++描述>第三版,边学边做一些笔记.所以这些笔记中的代码有很多将会非常简单,甚至可能只有一个记录或者结论. 辗转相除法用来求两个整数的最大公约数,即能同时整除两个数的最大整数.程序如下: int gdc(int m,int n){ int rem; ){ //0之前的那个数就是最…
目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及其分析 O(1)⎯⎯取非极端元素 O(logn)⎯⎯进制转换 O(n)⎯⎯数组求和 O(n$^2$ )⎯⎯起泡排序 O(2$^r$ )⎯⎯幂函数 计算模型 递归 线性递归 递归算法的复杂度分析 递归跟踪法 递推方程法 二分递归 多分支递归 数据结构与算法 java描述 笔记 第一章 算法及其复杂度…
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Node head;// 队列的队头 private Node rear;// 对列的尾 private int size;//队列长度 public Myqueue() {//初始化 head=rear=null; size=0; } /* * 插入函数 */ public void add(Node…
队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构 队列在程序程序设计中用的非常的频繁,因为javascript单线程,所以导致了任何一个时间段只能执行一个任务,而且还参杂了异步的机制, 那么带来的问题: 1. 在异步操作执行的时候,同步代码还在继续,那么同步代码依赖异步,自然就会出错 2. 多个同步的任务在不同的时间段被调用 jQuery的动画中,我们经常写一段连续的动画代码 $book.animate({…
KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上蛋疼的KMP是讲解很多,基本都是走的高大上路线看的你也是一头雾水,我试图用自己的理解用最接地气的方式描述 KMP KMP也是一种优化版的…
我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题(当数组填满后再添加就比较困难了,包括添加删除,都是需要把数组中所有的元素全部都变换位置的,javascript的的数组确实直接给优化好了,如push,pop,shift,unshift,split方法等等…) 线性表的顺序存储结构,最大的缺点就是改变其中一个元素的排列时都会引起…
串是由零个或多个字符组成的有限序列,又叫做字符串 串的逻辑结构和线性表很相似的,不同的是串针对是是字符集,所以在操作上与线性表还是有很大区别的.线性表更关注的是单个元素的操作CURD,串则是关注查找子串的位置,替换等操作. 当然不同的高级语言对串的基本操作都有不同的定义方法,但是总的来说操作的本质都是相似的.比如javascrript查找就是indexOf, 去空白就是trim,转化大小写toLowerCase/toUpperCase等等 这里主要讨论下字符串模式匹配的几种经典的算法:BF.BM…