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

posted @ 2015-11-28 18:56  周福林  阅读(158)  评论(0编辑  收藏  举报