数据结构与算法(js描述)———— 列表


前言

最近在看《数据结构与算法JavaScript描述》,各种数据类型的JS实现想做个总结。


一、实现列表类

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.hasNext = hasNext; //方法,判断后一位

	this.hasPrev = hasPrev; //方法,判断前一位

	this.length = length; //方法,列表中有多少个元素

	this.currPos = currPos; //方法,放回列表当前位置

	this.moveTo = moveTo; //方法,将当前位置移动到指定位置

	this.getElement = getElement; //方法,返回当前位置的元素

	this.contains = contains; //方法,判断给定值是否在列表中

}

二、方法实现

1.append:给列表添加元素

代码如下

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

2.find: 在列表中查找某一元素

代码如下

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

3.remove: 从列表中删除元素

代码如下

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

4.length: 列表中有多少个元素

代码如下

function length() {
	return this.listSize;
}

5.toString: 显示列表中的元素

代码如下

function toString() {
	return this.dataStore;
}

6.insert: 向列表中插入一个元素

代码如下

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

7.clear: 清空列表中所有的元素

代码如下

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

8.contains: 判定给定值是否在列表中

代码如下

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

9.遍历列表

代码如下

function front() {
	this.pos = 0;
}

function end() {
	this.pos = this.listSize-1;
}

function prev() {
	--this.pos;
}

function next() {
	if (this.pos < this.listSize) {
		++this.pos;
	}
}

function currPos() {
	return this.pos;
}

function moveTo(position) {
	this.pos = position;
}

function getElement() {
	return this.dataStore[this.pos];
}

function hasNext() {
	return this.pos < this,listSize
}

function hasPrev() {
	return this.pos >= 0;
}

10.迭代器访问列表

代码如下


for(name.front(); names.hasNext(); names.next()) {
		print(name.getElement());
}

//从后向前遍历

for(name.end(); names.hasPrev(); names.prev()) {
		print(name.getElement());
}

总结

列表是一组有序的数据,每个列表中的数据项成为元素;人们经常使用列表:待办事项列表、购物清单、十佳榜单、最后十佳榜单等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值