散列表(哈希表 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列表需要一个散列值(key)来存储指定数据,取数据也是依靠此. 散列值可以依靠计算数据的 ASCII码来获得,但是这会有一个问题,若干数据的散列值可能会相同,这样存储就会发生碰撞. 方案: 开链法, 对Hash表中每个Hash值建立一个冲突表,即将冲突的几个记录以表的形式存储在其中 开放寻址散列,当发生碰撞时,线性探测法检查散列表中的下一个位置是否为空.如果为空,就将数据存入该位置:如果不为空,则继续检查下一个位…
检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: //版本1 function seqSearch1(arr,data){ //顺序查找 //就是循环查找 挨着一个一个查找 //v1 返回布尔值 for (var i = 0; i < arr.length; ++i) { if (arr[i] == data) { return true; } }…
排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * @constructor */ function CArray(numElements){ var me = this; me.dataStore = []; me.pos = 0; me.numElements = numElements; me.insert = insert; me.toSt…
/** * 树,一种非线性的数据结构. 以分层的方式存储数据. * 一棵树最上面的节点成为根节点,如果一个节点下面有多个节点,这个节点称为父节点,下面的节点称为子节点 * 没有任何子节点的节点,陈宝国职位叶子节点. * * 二叉树是每个节点最多有两个子树的有序树 * 从一个节点到另外一个节点称为路径 * 树有层的概念,根节点是 0层,那它的子节点是第一层,以此类推. * 因为二叉树中,子节点只有两个,那么数据的查找,删除,插入实现起来就速度很快(因为非节点一就是节点二~ * * 二叉查找树 是一…
集合 集合(set)是一种包含不同元素的数据结构. 集合中的元素称为成员. 集合的两个最重要特性是:首先,集合中的成员是无序的:其次,集合中不允许相同成员存在. code function Set(){ var me = this; me.dataStore = []; me.add = add; me.remove =remove; me.size = size; me.union = union; me.intersect = intersect; me.subset = subset; m…
字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典中位置 show 显示字典数据 /** * 字典 * @constructor */ function Dictionary(){ var me = this; me.dataStore = []; me.add = add; me.find = find; me.remove = remove;…
队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表的规则并辅以代码实现 queue.js /** * 队列,先进先出 First-In-First-Out * 入队 出队 * @constructor */ function Queue(){ this.dataStore=[]; this.count = length; this.clear =…
链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 } ==> { element:obj1,next:obj2 } ==> { element:obj2,next:obj3 } ==> { element:obj3,next:null } ==> null head 是我们内部标识,我们默认不显示给用户这个数据,只用于内部使用. 即用…
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 后入先出 * @constructor */ function Stack(){ this.pop = pop; this.push = push //栈顶位置 this.top= 0; this.length = 0; this.dataStore = []; this.peek = peek;…
实现一个列表 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…