文章目录
前言
最近在看《数据结构与算法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());
}
总结
列表是一组有序的数据,每个列表中的数据项成为元素;人们经常使用列表:待办事项列表、购物清单、十佳榜单、最后十佳榜单等等。