列表是计算机编程的一种数据结构,可用于保存数据,和现实生活中的购物清单、任务列表类似。当不需要在一个数据量很大的序列中查找元素或者对元素进行排序时,列表可以起到和大的作用,这是列表最突出的优点;当然列表也存在明显的缺点:当数据结构非常复杂时,列表的作用就不那么明显。本文博主将实现一个简单的列表类,使用ES6编程实现。博主已将相应的算法文件的示例上传至博主的Github:https://github.com/Brucewu998/JavaScript-dataStructures-Algorithms-ES6,欢迎大家下载和star(收藏),博主会不断更新内容。
首先列表中一定要有一个可以容纳元素的容器,这个容器我们采用一个数组定义,可以容纳任意数据类型;其次还要有突出列表长度和列表的当前位置的属性。由此我们就可以对列表的属性进行定义:
class List {
//构造器
constructor() {
this.listSize = 0; //列表中数据的长度
this.pos = 0; //列表中数据的位置
this.data = []; //列表数据数组
}
//方法
......
}
当然,除了定义列表的属性,还要定义各种各样的列表操作方法,这样才能达到列表可操作的目的;列表的各种操作方法如下:
1、添加元素
append(ele) {
this.data[this.listSize++] = ele;
}
2、在列表中查找元素,并返回元素的位置:
find(ele) {
for (let i = 0; i < this.data.length; ++i) {
if (this.data[i] === ele) {
return i;
}
}
return -1;
}
3、移除列表中指定的元素
remove(ele) {
let index = this.find(ele);
if (index > -1) {
this.data.splice(index, 1);
--this.listSize;
return true;
}
return false;
}
4、获取列表长度
length() {
return this.data.length;
}
5、返回列表数组
toString() {
return this.data;
}
6、向列表中插入指定元素
insert(ele, after) {
let insertPos = this.find(after);
if (insertPos > -1) {
this.data.splice(insertPos + 1, 0, ele);
++this.listSize;
return true;
}
return false;
}
7、将整个列表清空
clear() {
delete this.data;
this.data = [];
this.listSize = 0;
this.pos = 0;
}
8、判断列表中是否包含指定值
container(ele) {
for (let i = 0; i < this.data.length; ++i) {
if (this.data[i] === ele) {
return true;
}
}
return false;
}
9、找到列表的第一个元素
front() {
this.pos = 0;
}
10、找到列表的最后一个元素
end() {
this.pos = this.data.length - 1;
}
11、找到列表中当前位置的前一个元素
prev() {
if (this.pos > 0) {
--this.pos;
}
}
12、找到列表中当前位置的后一个元素
next() {
if (this.pos < this.listSize - 1) {
++this.pos;
}
}
13、获取列表当前元素的位置
currPos() {
return this.pos;
}
14、将列表的当前位置移动至指定位置
moveTo(pos) {
this.pos = pos;
}
15、获取当前的列表元素
getListElement() {
return this.data[this.pos];
}