美文网首页
JavaScript描述数据结构与算法 -- 列表

JavaScript描述数据结构与算法 -- 列表

作者: 广告位招租 | 来源:发表于2017-10-04 15:10 被阅读0次

    生活中人们经常使用列表,榜单、清单之类。当在列表中保存元素不是太多时,当不需要在一个很长的序列中查找元素,或者对其进行排序时,列表就起到了他的作用,如果数据结构非常复杂,列表的意义就不大了,接下来就是使用js来创建一个简单地列表类。

    为了设计列表的抽象数据类型,需要给出列表的定义,包括列表应该拥有的属性以及列表可以执行那些操作。

         * 创建列表实例var list = new List()
         *实例属性
         *  this.dataStore  初始化空数组
         *  this.listSize  列表的元素个数
         *  this.pos  列表的当前位置指针
         *实例方法
         *  .append(ele)  为列表添加一个项
         *  .remove(ele_ind)  移除一个列表项(元素名或者序号)
         *  .find(ele_ind)  查询列表项(元素名或者序号)
         *  .length()  返回当前列表的长度
         *  .toShow()  显示列表中的全部元素
         *  .insert(ele, ele_ind)  向列表中插入一个元素(插入的元素,要插入到的ele元素的后面或者是index)
         *  .clear()  清空列表中的数据
         *  .contains()  判断给定的元素是否存在于列表中
         *  .front()  列表的指针指向开头
         *  .end()  列表的指针指向末尾
         *  .prev()  列表的指针指向前移动一位
         *  .next()  列表的指针指向后移动一位
         *  .currPos()  查看当前指针的位置
         *  .moveTo(pos)  移动指针到某位置
         *  .getElement()  返回当前指针所指的元素
         *  .hasPrev()  返回当前指针是否还有前一项
         *  .hasNext()  返回当前指针是否还有后一项
    

    具体实现方法

        //创建列表构造函数
        function List() {
            this.dataStore = []; //初始化空数组
            this.listSize = 0; //列表的元素个数
            this.pos = 0; //列表的当前位置
        };
        /*
         *append()为列表添加一个项
         *param{Strung} 添加的元素
         */
        List.prototype.append = function(ele) {
            this.dataStore[this.listSize++] = ele;
        };
        /*
         *remove()移除一个元素
         *param{Numbe/String} 要移除的元素
         */
        List.prototype.remove = function(ele_ind) {
            var find = this.find(ele_ind);
            if (find === -1) {
                return false
            }
            if (isNaN(find)) {
                this.remove(find)
            } else {
                this.dataStore.splice(find, 1);
                this.listSize--;
                return true
            }
        };
        /*
         *find()查询列表项
         *param{Number/String} 传入数字或者字符,返回当前数字所对应的列表项或当前列表项对应的index序列
         */
        List.prototype.find = function(ele_ind) {
            var _ele_ind = parseInt(ele_ind)
            if (isNaN(_ele_ind)) {
                for (var i = 0; i < this.dataStore.length; i++) {
                    if (this.dataStore[i] == ele_ind) {
                        return i
                    }
                }
                return -1
            } else {
                if (_ele_ind >= this.dataStore.length) {
                    return -1
                } else {
                    return this.dataStore[_ele_ind]
                }
            }
        };
        //返回当前列表的长度
        List.prototype.length = function() {
            return this.listSize
        };
        //显示列表中的全部元素
        List.prototype.toShow = function() {
            return this.dataStore
        };
        /*
         *向列表中插入一个元素
         *param{String} 要插入的元素
         *param{Number/String} 要插入到的ele元素的后面或者是index第几位
         */
        List.prototype.insert = function(ele, ele_ind) {
            var _find = this.find(ele_ind);
            if (_find == -1) {
                return false
            };
            if (isNaN(_find)) {
                this.dataStore.splice(ele_ind, 0, ele);
            } else {
                _find = this._find(ele_ind)
                this.dataStore.splice(_find + 1, 0, ele);
            }
            this.listSize++;
            return true
        };
        //clear()清空列表中的数据
        List.prototype.clear = function() {
            this.dataStore = [];
            this.listSize = 0;
            this.pos = 0;
        };
        /*
         *contains()判断给定的元素是否存在于列表中
         *param{String} 给定的值
         */
        List.prototype.contains = function(ele) {
            var _find = this._find(ele);
            if (_find == -1) {
                return false
            }
            return true
        };
        //列表的指针指向开头
        List.prototype.front = function() {
            this.pos = 0;
        };
        //列表的指针指向末尾
        List.prototype.end = function() {
            this.pos = this.dataStore.length - 1;
        };
        //列表的指针指向前移动一位
        List.prototype.prev = function() {
            --this.pos;
        };
        //列表的指针指向后移动一位
        List.prototype.next = function() {
            if (this.pos < this.dataStore.length) {
                ++this.pos;
            }
        };
        //查看当前指针的位置
        List.prototype.currPos = function() {
            return this.pos;
        };
        /*
         *移动指针到某位置
         *param{Number} 要移动到的位置
         */
        List.prototype.moveTo = function(pos) {
            if (pos >= 0 && pos <= this.dataStore.length) {
                this.pos = pos;
            }
        };
        //返回当前指针所指的元素
        List.prototype.getElement = function() {
            return this.dataStore[this.pos]
        }
        //返回当前指针是否还有前一项
        List.prototype.hasPrev = function() {
            return this.pos >= 0
        }
        //返回当前指针是否还有后一项
        List.prototype.hasNext = function() {
            return this.pos < this.listSize;
        }
        /*
         *私有方法,传入一个列表元素,返回当前元素对应的index
         *param{String} 列表元素
         */
        List.prototype._find = function(ele) {
            for (var i = 0; i < this.dataStore.length; i++) {
                if (this.dataStore[i] == ele) {
                    return i;
                }
            }
            return -1;
        };
    

    相关文章

      网友评论

          本文标题:JavaScript描述数据结构与算法 -- 列表

          本文链接:https://www.haomeiwen.com/subject/pbycuttx.html