DSA__JS 学习随笔--列表

列表(List)

列表是一组有序的数据,每个列表中的数据项称为元素

实现列表类

function List() {
	this.listSize = 0; // listSize(属性) -- 列表的元素个数
	this.pos = 0; // pos(属性) -- 列表的当前位置
	this.length = length; // length(属性) -- 返回列表中元素的个数
	this.clear = clear; // clear(方法) -- 清空列表中的所有元素
	this.toString = toString; // toString(方法) -- 返回列表的字符串形式
	this.getElement = getElement; // getElement(方法) -- 返回当前位置的元素
	this.insert = insert; // insert(方法) -- 在现有元素后插入新元素
	this.append = append; // append(方法) -- 在列表的末尾添加新元素
	this.remove = remove; // remove(方法) -- 从列表中删除元素
	this.front = front; // front(方法) -- 将列表的当前位置设移动到第一个元素
	this.end = end; // end(方法) -- 将列表的当前位置移动到最后一个元素素
	this.prev = prev; // prev(方法) -- 将当前位置后移一位
	this.next = next; // next(方法) -- 将当前位置前移一位
	this.currPos = currPos; // currPos(方法) -- 返回列表的当前位置
	this.moveTo = moveTo; // moveTo(方法) -- 将当前位置移动到指定位置
	this.dataStore = []; // 初始化一个空数组来保存列表元素
	this.find = find; // find(方法) -- 查找指定元素,并返回在列表中的位置
	this.contains = contains; // contains(方法) -- 判断值是否在列表中
	
	//给列表添加元素
	function append(element) {
		this.dataStore[this.listSize++] = element;
	}
	//在列表中查找某一元素
	function find(element) {
		for(let i = 0; i < this.dataStore.length; i++) {
			if(this.dataStore[i] === element) {
				return i;
			}
		}
		return -1;
	}
	//从列表中删除元素
	function remove(element) {
		let foundAt = this.find(element);
		if(foundAt > -1) {
			this.dataStore.splice(foundAt,1);
			this.listSize--;
			return true;
		}
		return false;
	}
	//列表中有多少个元素
	function length() {
		return this.listSize;
	}
	//显示列表中的元素
	function toString() {
		return this.dataStore;
	}
	//向列表中插入一个元素
	function insert(element, after) {
		let insertPos = this.find(after);
		if(insertPos > -1) {
			this.dataStore.splice(insertPos+1, 0, element);
			this.listSize++;
			return true;
		}
		return false;
	}
	//清空列表中所有的元素
	function clear() {
		delete this.dataStore;
		this.dataStore = [];
		this.listSize =  this.pos = 0;
	}
	//判断给定值是否在列表中
	function contains(element) {
		for(let 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];
	}		
}

迭代器访问列表

利用迭代器,可以不必关心数据的内部存储方式,以实现对列表的遍历

for(cList.front(); cList.currPos() < cList.length(); cList.next()) {
	console.log(cList.getElement());
}

参考:数据结构与算法JavaScript描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值