数据结构

1、哈希表

哈希表也叫散列函数,它对不同的输入值得到一个固定长度的消息摘要。理想的哈希函数对于不同的输入应该产生不同的结果,同时散列结果应当具有同一性和雪崩效应。

在js中,object属性的实现就是hash表,因此只要在object上简单封装方法,就可以使用object管理实现高效的hashtable了。

    class HashTable  {
        constructor() {
            this.hashTable = new Object();
            this.size = 0;
        }

        _hasKey(key) { // private fucntion
            return (key in this.hashTable);
        }

        add(key, value) {
            if(!this._hasKey(key)) {
                this.hashTable[key] = value;
                this.size++;
            }
        }

        remove(key) {
            if(this._hasKey) {
                delete this.hashTable[key];
                this.size--;
            }
        }

        getValue(key) {
            if(this._hasKey(key)) {
                return this.hashTable[key];
            }
            return null;
        }

        getSize() {
            return this.size;
        }

        clear() {
            this.hashTable = new Object();
            this.size = 0;
        }
    }

2、队列

队列是FIFO的有序集合,新增加的元素放在队尾,要移除的元素在队列的顶部。

3、栈

栈是LIFO的有序集合,只在表尾进行删除和插入的操作。

4、链表

链表是由一组节点组成的集合,每个节点都使用一个对象的索引来指向它后一个节点。指向另一个节点的引用叫做链。

5、双向链表

虽然从链表的头结点遍历链表很简单,但是反过来,从后向前遍历就很难。为了使从后向前的遍历变得简单,我们给Dnode类增加一个previous属性,指向前一个元素,这就是双向链表。

6、二叉树和平衡二叉树

二叉树是一种树型结构,它的特点是每个结点至多只有两个子树,并且,二叉树有左右之分,次序不能随意颠倒。

二叉树的性质:

二叉树

二叉树的遍历方式:

二叉树的数据结构和遍历算法实现如下:

7、本节源码

源码地址arrow-up-right

8、参考文档

哈希表(hashtable)的javascript简单实现arrow-up-right

JavaScript数据结构《队列》arrow-up-right

javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作arrow-up-right

Last updated