js:数据结构笔记1---数组】的更多相关文章

数组结构 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构. 数组通常情况下用于存储一系列同一种数据类型的值. 但在JavaScript里,也可以在数组中保存不同类型的值. 但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力). 补充普通语言的数组封装(比如Java的ArrayList) 常见语言的数组不能存放不同的数据类型,因此所有在封装时通常存放在数组中的是Object类型 常见语言的数组容量不会自动改变.(需要进行扩容操作) 常见语言的数组进行中间插入和删除操作…
高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0],a[1]进行插入排序,直到最后一个: 然后换下一个间隔值,直到所有间隔值排序完(当间隔值为1时,就是一般的插入排序): 效果: 首先在类中添加间隔数组: this.gaps = [5,3,1]; 然后添加函数: function shellsort() { for(var g = 0; g < t…
数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem) { this.elem = elem; this.next = null; } function LList() { this.head = new Node("head"); this.find = find; this.insert = insert; this.findPrevi…
JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串类型: 操作: 判断:isArray(); 复制: 浅复制: var arr1 = arr2; 深复制: function copy(arr1) { var arr2 = []; for(var i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; }…
图:是由边和定点的集合组成:  按照图的定点对是否有序可以分为:有向图和无向图:  路径:所有顶点都由边连接构成:路径长度为第一个定点到最后一个顶点之间的数量:  环:指向自身的顶点,长度为0:圈:至少有一条边的路径,且第一个顶点和最后一个顶点相同: 强连通:如果两个顶点之间有路径,则这两个顶点就是强连通,反之: 构建简单有向图: 利用邻接表数组表示:构建二维数组,第一个存储顶点标号,第二个存储与这个顶点相连的顶点标号: function Graph (v) { this.vertices =…
树:以分层的方式存储数据:节点:根节点,子节点,父节点,叶子节点(没有任何子节点的节点):层:根节点开始0层: 二叉树:每个节点子节点不超过两个:查找快(比链表),添加,删除快(比数组): BST:二叉树查找: 设置根节点为当前节点: 如果要插入的节点小于当前节点,则设置其左节点为新的当前节点:大于的话选右节点: 如果如果选择的节点为null,则将要插入的节点放在这个位置,退出:否则继续向下查找: 实现的基本代码: function Node (data,left,right) { this.d…
哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this.table = new Array(137); this.simpleHash = simpleHash; this.showDistro = showDistro; this.put = put; this.init = init; } function simpleHash(data) { va…
Dictionary类的基础是数组不是对象:字典的主要用途是通过键取值: 基本定义: function Dictionary() { this.dataStore = new Array(); this.add = add; this.find = find; this.remove = remove; this.showAll = showAll; } function add(key,value) { this.dataStore[key] = value; } function find(…
队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.dequeue = dequeue; this.front = front; this.back = back; this.count = count; this.toString = toString; this.isEmpty = isEmpty; } function enqueue(elem) { t…
栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.length = length; this.clear =clear; } function push(elem) { this.dataStore[this.top++] = elem; } function pop() {…
除了之前介绍的将数组数据在一个页面中输出的方法,还可以将数组数据分组,按照点击,在不同页面中分别显示,方法为: Model: 例如:Table Router: 设置一个父对象和子对象设置: this.resource("tables",function() { this.resource("table",{path:"/:table_id"}); //依照id输出 }); Route: App.TablesRoute = Em.Route.ext…
一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {"json:":"666"}]; console.log(arr.length); 二.JavaScript 数组的两种声明 1.var arr = [元素]; var arr = ["坚持"]; 2.new Array(); 或者 var arr2 =…
二维数组 例子:矩形反转: <script> var arr=[[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]; for(var i=0;i<arr.length;i++){ for(var j=0;j<arr[i].length;j++){ document.write(arr[i][j]); } document.write("<br>"); } document.writ…
1.创建数组并赋值 //对象方式 var arr=new Array(1,2,3,4); //隐形声明方式 var arr2=[5,6,7,8]; 2.数组可以存储任何类型的数据 3.访问数组,是用下标的方式 //访问第一个 arr[0] arr[arr.length-1] 4.遍历数组: //for循环方式 var arr=[1,2,3,4]; for(var i=0;i<arr.length;i++){ alert(arr[i]); } //for in 方式 var arr1=[5,6,7…
1.Array构造函数有一个很大的问题,就是不同的参数,会导致它的行为不一致,es6好像专门为此对数组有升级 因此,不建议使用new Array生成新数组,直接使用数组字面量[...]是更好的做法. 2.Array.isArray方法用来判断一个值是否为数组.它可以弥补typeof运算符的不足 var a = [1, 2, 3]; typeof a // "object" Array.isArray(a) // true 3.push()和pop() 结合使用,就构成了“后进先出”的栈…
1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数组的元素可以是对象或其它数组. 3.数组是动态的,数组长度可长可短.在创建数组时无须声明一个固定的大小或者在数组大小变化时无须重新分配空间 4.数组可以是稀疏的.数组元素的索引不一定是连续的,它们之间可以有空缺,每个数组都有一个length属性,针对非稀疏数组,该属性就是数组元素的个数,针对…
动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { var val = []; for(var i = 1; i <= n; ++i) { val[i] = 1; } if(n === 1) { return 1; } else { for(var i = 2; i <= n; ++i) { val[i] = i * val[i-1]; } ret…
顺序查找:也称线性查找,暴力查找的一种 基本格式: var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math.random() * 101); } function seqSearch(arr,data) { for(var i = 0; i < arr.length; ++i) { if(arr[i] === data) { return i; } } return -1; } seqSearch(nums,…
基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this.insert = insert; this.toString = toString; this.clear = clear; this.setData = setData; this.swap =swap; for(var i = 0; i < numElems; ++i) { this.dataS…
集合:唯一性,无序性: 基本结构: function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.contains =contains; this.show = show; } function contains(data) { var pos = this.dataStore.indexOf(data); if(pos > -1) { return true; } else { return…
列表: 定义:一组有序的数据: function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.find = find; ......................... } 方法: append:添加数据 function append(element) { this.dataStore[this.listSize++] = element; } find:查找元素://indexOf function…
今天来学习一下js中的一维数组.二维数组,以及数组的赋值.遍历.删除.排序等操作:    1 数组的声明 js提供了一个数组对象Array,默认是一维数组,其申明的方法如下: var aCity = new Array(); 在实际应用中,可以在申明的同时,给数组进行赋值: var aCity =  new Array("北京","上海","广州"); 还可以在声明数组时,给数组指定长度: var aCity =  new Array(2); 要…
第一章 JS 简介 1. 环境搭建的三种方式 1. 下载浏览器 2. 使用 Web 服务器 ( XAMPP ) 3. 使用 Node.js 搭建 Web 服务器 4. 代码地址>> 2. JS 语法 第二章 数组 1. 数组的增删 1. 在数组的末尾添加元素 1). nums[nums.length] = 10; 2). nums.push(); 2. 在数组的开始添加元素 1).  2). 使用 numbers.unshift(-2); 在开始位置添加元素. 3. 要删除数组里最后的元素,使…
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的实例.日后还将对官方文档进阶和高级部分分专题进行学习并记录. 尽管前端学习面临着各种各样的焦虑,尽管越来越多的框架出现,然而无可否认的是,它们都在从不同的角度提高生产力--从这个角度而言,之所以焦虑,本质原因是因为行业的门槛其实是降低了,而自己变得"不值钱"起来.在目前的环境下,无论如何必…
js读书笔记 基本类型的基本函数总结 1. Boolean() 数据类型 转换为true的值 转换为false的值 Boolean true false String 任何非空字符串 ""(空字符串) Number 任何非零数值(包括无穷大) 0和NaN Object 任何对象 null Undefined n/a undefined 2. Number():可以用于任何数据类型 数据类型 返回值 true or false 1和0 数字值 简单传入和返回 null 0 undefin…
最近研究函数式编程,都是haskell和scheme交互着看的,所以笔记中两种语言的内容都有,练习一般也都用两种语言分别实现. 本篇练习一些数组有关的问题,之所以与数组相关是因为在命令式编程中以下问题的核心数据结构主要是数组,而在scheme和haskell中主要是用list来实现. scheme中没有数组这个数据结构,所以需要用list来实现类似数组的操作,下面首先定义了一些辅组函数用于操作和显示数组, (define (gen-matrix width hight f) (define (g…
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 http://blog.nodejs.org/ 1.4 开发工具 WebStorm6 下载地址 http://www.jetbrains.com/webstorm/whatsnew/ 二:安装配置 2.1 下载nodejs for linux (nodejs source) 2.2 nodejs安装过程中遇到的问题…
菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函数和new命令 五.构造函数和new命令 六.构造函数和new命令 七.构造函数和new命令 八.构造函数和new命令 一.构造函数和new命令 1.构造函数 JavaScript语言的对象体系,不是基于"类"的,而是基于构造函数(constructor)和原型链(prototype) 为…
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterator 声明.解构.展开.类型断言 泛型 泛型约束 交叉类型.联合类型 索引类型 映射类型 类型兼容 类型保护.推断 模块和命名空间 装饰器 类装饰器: 函数装饰器: 属性装饰器: 参数装饰器: vue.js 学习笔记3--TypeScript 工具 npm install -g typescript…
js学习笔记一:js数据类型   1:基本数据类型       number类型(整数,小数)      String类型          boolean类型        NaN类型其实是一个number类型表示它不是一个       null类型其实也是一个object类型的指代的是空对象的引用       undefined类型表示一个变量没有被初始化 2:引用数据类型      object   如果想知道一个变量所属的数据类型可以用typeof操作符二:数组   1:数组的定义:类似…