数据结构和算法

摘要: ##单一职责原则* 职责被定义为:引发变化的缘由;* SRP原则体现为:一个对象(方法)只作一件事情;####经常使用模式:* 代理模式* 迭代器模式* 单例模式* 装饰者模式####分离职责* 若是随着需求的变化,有两个职责老是同时变化,那就没必要分离他们;* 职责的变化轴线仅当它们肯定会发生变化时才有... 阅读全文
posted @  2015-07-02 18:05 JinksPeng 阅读(4) |  评论 (0)  编辑
 
摘要: ##鸭子类型:* 只关注对象的行为,而不关注对象自己;##多态:* 简介: 同一操做用于不一样对象能够产生不一样的结果;* 背后的思想:将不变的事与可能变的事分开,封装;关键是消除类型之间的耦合;* 实现: * 通常语言:经常使用继承,向上转型来表现对象的多态特性; * JS:因为自己的的‘鸭子类型’特... 阅读全文
posted @  2015-07-02 18:03 JinksPeng 阅读(4) |  评论 (0)  编辑
 
摘要: ##状态模式* 状态模式的关键是把事物的每种状态都封装成单独的类,跟此种状态有关的行为都被封装在这个类内部;当内部状态改变时,会带来不一样的行为变化;####电灯开关的例子```var offLightState = function(light) { this.light = light;};of... 阅读全文
posted @  2015-06-17 09:53 JinksPeng 阅读(3) |  评论 (0)  编辑
 
摘要: ##中介者模式* 解除对象与对象之间的耦合关系;增长一个中介者后,全部的对象均可以经过中介者通讯而不是互相引用;####中介者模式例子* 游戏```function Player(name, teamColor) { this.state = 'live'; this.name = name; ... 阅读全文
posted @  2015-06-17 09:52 JinksPeng 阅读(7) |  评论 (0)  编辑
 
摘要: ##享元模式* 是一种用于性能优化的模式;核心是运用共享技术来有效支持大量细粒度的对象;####内部状态和外部状态* 享元模式要求对象的属性划分为内部状态和外部状态;* 目标是减小共享对象的数量; * 内部状态存储于对象内部; * 内部状态能够被一些对象共享; * 内部状态独立于具体的场景,通... 阅读全文
posted @  2015-06-17 09:51 JinksPeng 阅读(5) |  评论 (0)  编辑
 
摘要: ##组合模式* 将对象组合成树形结构,以表示‘部分-总体’的层次结构;遍历树形结构的操做只须要一次操做;* 利用对象多态性的统一对待组合对象和单个对象,不用关心他们的不一样;* 像命令模式中宏命令就是一种组合模式;####请求在树中传递的过程;* 若是子节点是叶节点,叶对象自身会处理这个请求;若是仍是... 阅读全文
posted @  2015-06-17 09:50 JinksPeng 阅读(5) |  评论 (0)  编辑
 
摘要: ##观察者模式* 又叫发布订阅模式,定义对象间一对多的依赖关系,当一个对象的状态发生改变时,全部依赖它的对象都获得通知;* JS开发中,通常用事件模型替代传统的发布-订阅模式####做用* 能够普遍应用于异步编程中,替代传统回调函数;如订阅`ajax`请求的`error、succ`事件;* 取代对象... 阅读全文
posted @  2015-06-17 09:48 JinksPeng 阅读(5) |  评论 (0)  编辑
 
摘要: ##代理模式* 为一个对象提供一个代用品或占位符。以便控制对他的访问;#####面向对象设计原则-单一职责原则* 就一个类(对象,函数)而言,应该仅有一个引发他变化的缘由;(低耦合)####代理和本体借口的一致性* 当不须要代理的时候能够替换回本体####保护代理* 过滤请求;能够用于控制不一样权限对... 阅读全文
posted @  2015-06-17 09:47 JinksPeng 阅读(10) |  评论 (0)  编辑
 
摘要: ##单例模式* 保证一个类只有一个实例,并提供一个访问他的全局访问点;####模拟单例实现* 传统方式:```var createDiv = (function(){ var instance; var createDiv = function(html){ if(instance) ... 阅读全文
posted @  2015-06-17 09:46 JinksPeng 阅读(9) |  评论 (0)  编辑
 
摘要: 动态规划:递归是从顶部开始将问题分解,经过解决全部分解出小问题来解决总体问题;动态规划从底部开始解决问题,将全部小问题解决,而后合并掉一个总体解决方案; function dynFib(n) { var val = []; for(var i = 1; i b) ? a : b;}functi... 阅读全文
posted @  2014-10-25 12:04 JinksPeng 阅读(10) |  评论 (0)  编辑
 
摘要: 顺序查找:也称线性查找,暴力查找的一种基本格式:var nums = [];for(var i = 0; i max min = arr[i]; } } return min;}View Code自组织数据:通过屡次查找以后,查找最频繁的元素会从原来... 阅读全文
posted @  2014-10-25 10:48 JinksPeng 阅读(17) |  评论 (0)  编辑
 
摘要: 高级排序算法:(处理大数据:百万以上)希尔排序:是插入排序的优化版;首先设置间隔数组,而后按照每一个间隔,分别进行排序;如第一个间隔为5,首先a[5]与a[0]进行插入排序;而后a[6]和a[0],a[1]进行插入排序,直到最后一个;而后换下一个间隔值,直到全部间隔值排序完(当间隔值为1时,就是通常的... 阅读全文
posted @  2014-10-20 09:11 JinksPeng 阅读(10) |  评论 (0)  编辑
 
摘要: 基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this.insert = insert; this.toString = toStr... 阅读全文
posted @  2014-10-19 17:23 JinksPeng 阅读(18) |  评论 (0)  编辑
 
摘要: 图:是由边和定点的集合组成; 按照图的定点对是否有序能够分为:有向图和无向图;路径:全部顶点都由边链接构成;路径长度为第一个定点到最后一个顶点之间的数量;环:指向自身的顶点,长度为0;圈:至少有一条边的路径,且第一个顶点和最后一个顶点相同;强连通:若是两个顶点之间有路径,则这两个顶点就是强连通,反之... 阅读全文
posted @  2014-10-18 19:14 JinksPeng 阅读(29) |  评论 (1)  编辑
 
摘要: 树:以分层的方式存储数据;节点:根节点,子节点,父节点,叶子节点(没有任何子节点的节点);层:根节点开始0层;二叉树:每一个节点子节点不超过两个;查找快(比链表),添加,删除快(比数组);BST:二叉树查找:设置根节点为当前节点;若是要插入的节点小于当前节点,则设置其左节点为新的当前节点;大于的话选右... 阅读全文
posted @  2014-10-18 11:24 JinksPeng 阅读(26) |  评论 (2)  编辑
 
摘要: 集合:惟一性,无序性;基本结构: function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.contains =contains; this.show = show; } ... 阅读全文
posted @  2014-10-17 20:45 JinksPeng 阅读(12) |  评论 (0)  编辑
 
摘要: 哈希表(散列表):经过哈希函数将键值映射为一个字典;哈希函数:依赖键值的数据类型来构建一个哈希函数;一个基本的哈希表:(按字符串计算键值)function HashTable() { this.table = new Array(137); this.simpleHash = simpleH... 阅读全文
posted @  2014-10-17 16:13 JinksPeng 阅读(26) |  评论 (0)  编辑
 
摘要: Dictionary类的基础是数组不是对象;字典的主要用途是经过键取值;基本定义:function Dictionary() { this.dataStore = new Array(); this.add = add; this.find = find; this.remove =... 阅读全文
posted @  2014-10-17 14:09 JinksPeng 阅读(27) |  评论 (0)  编辑
 
摘要: 数组:其余语言的数组缺陷:添加/删除数组麻烦;js数组的缺点:被实现为对象,效率低;若是要实现随机访问,数组仍是更好的选择;链表:结构图:基本代码:function Node (elem) { this.elem = elem; this.next = null;}function LLis... 阅读全文
posted @  2014-10-17 11:45 JinksPeng 阅读(17) |  评论 (0)  编辑
 
摘要: 队列是一种特殊的列表,数据结构为FIFO;定义:function Queue() { this.dataStore = []; this.enqueue = enqueue; this.dequeue = dequeue; this.front = front; this.bac... 阅读全文
posted @  2014-10-16 10:26 JinksPeng 阅读(15) |  评论 (0)  编辑
 
摘要: 栈是一种特殊的列表,数据结构为LIFO;定义:function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.len... 阅读全文
posted @  2014-10-15 09:41 JinksPeng 阅读(16) |  评论 (0)  编辑
 
摘要: 列表:定义:一组有序的数据;function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.find = find; .........................}方法:append:... 阅读全文
posted @  2014-10-13 09:31 JinksPeng 阅读(19) |  评论 (0)  编辑
 
摘要: JS中数组:只是一种特殊的对象,比其余语言中效率低;属性是用来表示偏移量的索引;在JS中,数字索引在内部被转化为字符串类型(这也是为何写对象属性的时候能够不叫引号),由于对象中的属性必须是字符串类型;操做:判断:isArray();复制:浅复制:var arr1 = arr2;深复制:functi... 阅读全文
posted @  2014-10-12 13:29 JinksPeng 阅读(19) |  评论 (0)  编辑
相关文章
相关标签/搜索