• JavaScript数据结构 列表


    JavaScript数据结构 ---- 列表

    列表是一组有序的数据。每个列表的数据称为元素,列表中可以保存多少元素没有事先限定,实际使用时元素的数量受到程序内存的限制。


    实现列表类
    根据抽象数据类型,可以实现一个 List 类。

    function List() {
    	this.listSize = 0;        // 元素的个数
    	this.pos = 0;
    	this.dataStore = []       //初始化一个空数组
    	this.clear = clear;       // 清空元素
    	this.find = find;         // 查找元素
    	this.toString = toString; // 显示列表中的所有元素
    	this.insert = insert;     // 插入元素
    	this.append = append;     // 在列表末尾添加元素
    	this.remove = remove;     // 从列表中删除元素
    	this.front = front;       // 将列表的当前位置移动到第一个元素
    	this.end = end;           // 将列表的当前位置移动到最后一个元素
    	this.prev = prev;         // 将当前位置前移一位
    	this.next = next;         // 将当前位置后移一位
    	this.length = length;     // 返回列表中的元素个数
    	this.currPos = currPos;   // 返回列表的当前位置
    	this.moveTo = moveTo;     // 将当前位置移动到指定位置
    	this.getElement = getElement; // 显示当前元素
    	this.contains = contains;  //判断给定值是否在列表中 
    }
    

    append:给列表添加元素
    方法 append() 给列表的下一个位置增加一个新的元素,这个位置刚好等于变量 listSize 的值,当新元素就位后,变量 listSize 加 1。

    function append(element) {
    	this.dataStore[this.listSize++] = element;
    }
    

    find :在列表中查找元素
    find() 方法通过对数组对象进行 dataStore 进行迭代,查找给定的元素。如果找到,就返回该元素在列表中的位置,否则返回 -1。

    function find(element) {
    	 for (var i = 0; i < this.dataStore.length; i++) {
    	 	if (this.dataStore[i] = element) {
    	 		return i;
    	 	}
    	 }
    	 return -1;
    }
    

    remove:从列表中删除元素
    实现从列表中删除一个元素,首先需要在列表中找到该元素,然后删除它,并且调整底层的数组对象填充删除该元素后留下的空白。
    remove() 方法使用 find() 方法返回的位置对数组 dataStore 进行截取。数组改变后,将变量 listSize 的值减 1,以反映列表的最新长度。若成功删除元素,返回 true,否则返回 false。

    function remove(element) {
    	var foundAt = this.find(element);
    	if (foundAt > -1) {
    		this.dataStore.splice(foundAt, 1);
    		this.listSize--;
    		return true;
    	}
    	return false;
    }
    

    length:列表中有多少元素

    function length() {
    	return this.listSize;
    }
    

    toString:显示列表中的元素

    function toString() {
    	return this.dataStore;
    }
    

    insert:向列表中插入一个元素
    insert() 方法需要知道将元素插入到什么位置,可以假设插入是指插入到列表中某个元素之后。

    function insert(element, after) {
    	var insertPos = this.find(after);
    	if (insertPos > -1) {
    		this.dataStore.splice(insertPos + 1, 0, element);
    		this.listSize++;
    		return true;
    	}
    	return false;
    }
    

    clear:清空列表中所有的元素
    clear() 方法使用 delete 操作符删除 dataStore,接着在下一行创建一个空数组。最后一行将 listSize 和 Pos 的值设为 0,表示这是一个新的空列表。

    function clear() {
    	delete this.dataStore;
    	this.dataStore = [];
    	this.listSize = this.pos = 0;
    }
    

    constains:判断给定值是否在列表中

    function contains(element) {
    	for (var i = 0; i < this.dataStore.length; i++) {
    		if (this.dataStore[i] == element) {
    			return true;
    		}
    	}
    	return false;
    }
    

    遍历列表
    以下这些方法允许在列表中移动。

    function front() {
    	this.pos = 0;
    }
    
    function end() {
    	this.pos = this.listSize - 1;
    }
    
    function prev() {
    	if (this.pos > 0) {
    		this.pos--;
    	}
    }
    
    function next() {
    	if (this.pos < this.listSize - 1) {
    		this.pos++;
    	}
    }
    
    function currPos() {
    	return this.pos;
    }
    
    function moveTo(position) {
    	this.pos = position;
    }
    
    function getElement() {
    	return this.dataStore[this.pos];
    }
    

    参考资料:
    JavaScript高级程序设计
    JavaScript MDN
    Data Structures and Algorithms with JavaScript

  • 相关阅读:
    【黑金视频连载】FPGA NIOSII视频教程(08)RTC实验
    【黑金研发】【ABS05】函数信号发生器进行中…
    【黑金视频连载】NIOSII视频教程(05)电平中断实验
    【新品发布】正式发布 [ ABS05 ] 函数信号发生器
    【黑金视频连载】FPGA NIOSII视频教程(13)IIC实验实验
    【黑金视频连载】NIOS II视频教程(01)软件安装
    解决input设置背景后,在ie7下浏览内容过长背景跟着滚动
    命令开启数据库服务器
    装win7 旗舰版的蛋疼经历,装后疑难杂症及解决办法
    海量jquery插件
  • 原文地址:https://www.cnblogs.com/zhoufulin/p/5003266.html
Copyright © 2020-2023  润新知