列表是一组有序的数据。每个列表中的数据项被称为元素。列表包含对应的属性和方法。
接下来,我们来实现一个完整的列表类。
function myList()
{
this.listSize=0; //列表的大小
this.pos=0; //列表当前元素的位置
this.dataStore=[]; //存储数据
this.append=append; // 在列表结尾添加元素
this.find=find; //根据元素的值,寻找元素在列表中的位置
this.remove=remove; //删除列表中已知数值的数据
this.insert=insert; //在某个元素后面添加新元素
this.clear=clear; //清除列表中的元素
this.length=length; //获得列表的大小
this.toString=toString; //查看列表
this.front=front; //将列表的当前位置移动到第一个元素
this.end=end; //将列表的当前位置移动到最后一个元素
this.prev=prev; //将当前位置前移一位
this.next=next; //将当前位置后移一位
this.currPos=currPos; //返回当前位置
this.getElement=getElement; //返回对应当前位置的数值
}
列表结尾添加元素
function append(data)
{
this.dataStore.push(data);
this.listSize++;
}
寻找元素在列表中的位置,如果找到返回对应的索引,如果没找到返回-1。
function find(data)
{
for(var i=0;i<this.dataStore.length;i++)
{
if(this.dataStore[i]==data)
{
return i;
}
}
return -1;
}
删除列表中已知数值的数据:首先,找到该元素的索引,然后进行删除操作。
function remove(data)
{
var index_data=this.find(data);
if(index_data>=0)
{
this.dataStore.splice(index_data,1);
this.listSize--;
return true;
}
return false;
}
在某个元素后面添加新元素
function insert(element,after)
{
var index_data=this.find(after);
if(index_data>=0)
{
this.dataStore.splice(index_data,0,element);
this.listSize++;
return true;
}
return false;
}
清除列表中的元素
function clear()
{
delete this.dataStore;
this.dataStore=[];
this.pos=this.listSize=0;
}
获取列表的大小
function length()
{
return this.listSize;
}
查看列表
function toString()
{
return this.dataStore;
}
对当前元素的操作,将当前位置 设置 为头或尾
function front()
{
this.pos=0;
}
function end()
{
this.pos=this.listSize-1;
}
以下是将当前位置前移或者后移一位
function prev()
{
if(this.pos>0)
{
this.pos=this.pos-1;
}
}
function next()
{
if(this.pos<(this.listSize-1))
{
this.pos=this.pos+1;
}
}
function currPos()
{
return this.pos;
}
function getElement()
{
return this.dataStore[this.pos];
}
整个抽象的类已经创建好了,接下来我们开始使用了。
//创建一个由水果组成的列表
var fruits=new myList();
//添加元素
fruits. append("apple");
fruits. append("pear");
fruits. append("banana");
fruits. append("orange");
//打印列表
console.log(fruits.toString());
//移动到列表中的第一个元素
fruits.front();
console.log(fruits. getElement());
//移动到列表的下一个元素
fruits.next();
console.log(fruits. getElement());
//移动到列表的上一个元素
fruits.prev();
console.log(fruits. getElement());
//移动到列表中的最后一个元素
fruits.end();
console.log(fruits. getElement());
//指定元素后面添加元素
fruits.insert("purple","banana");
console.log(fruits.toString());
//删除指定元素
fruit.remove("purple");
console.log(fruits.toString());
接下来我们看看迭代器。
使用迭代器可以不关心数据的内部存储方式,以实现对列表的遍历。
用迭代器与数组索引的方式相比的优点:
(1) 访问列表可以不关心底层的数据结构;
(2) 可以使用不同类型的数据存储方式,来实现列表。
(3) 当列表添加元素时,列表的索引修改了,此时可以单独更新列表,而不需要修改迭代器。
for(fruits.front(); fruits.currPos() < fruits.length(); fruits.next())
{
print(fruits.getElement());
}
网友评论