简介
最近,在看《数据结构与算法 Javascript描述》,本篇文章,只是看书的笔记,算是重复造轮子;觉得有用的可以看看,觉得无用的,勿喷;
定义
列表是一组有序的数据,每个列表中的数据项称为元素,在Javascript中,列表中的元素可以是任意数据类型。不包含任何元素的列表称为空列表。
列表的抽象数据类型定义
抽象数据类型 | 定义 |
---|---|
listSize(属性) | 列表的元素个数 |
pos(属性) | 列表的当前位置 |
length(属性) | 返回列表中的元素个数 |
clear(方法) | 清空列表中的所有元素 |
toString(方法) | 返回列表的字符串形式 |
getElement(方法) | 返回当前位置的元素 |
insert(方法) | 在现有的元素后插入新元素 |
append(方法) | 在列表的末尾添加新元素 |
remove(方法) | 从列表中删除元素 |
find(方法) | 从列表中查找元素的位置 |
front(方法) | 将列表的当前位置移到第一个元素 |
end(方法) | 将列表的当前位置移到最后一个元素 |
prev(方法) | 将当前位置前移一位 |
next(方法) | 将当前位置后移一位 |
currPos(方法) | 返回列表的当前位置 |
moveTo(方法) | 将当前位置移到到指定位置 |
contains(方法) | 从列表中查找元素是否存在 |
列表类的实现
1、创建List类
定义List构造函数,根据定义的列表抽象数据类型,创建一个List类
function List() {
this.dataList = [];
this.listSize = 0;
this.pos = 0;
this.len = length;
this.clear = clear;
this.toString = toString;
this.getEle = getEle;
this.insert = insert;
this.append = append;
this.remove = remove;
this.find = find;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.currPos = currPos;
this.moveTo = moveTo;
this.contains = contains
}
2、给列表添加元素:append
function append(ele) { //添加元素
this.listStze += 1;
this.dataList[this.listSize - 1] = ele;
}
该方法往列表里添加元素,先将列表扩容,然后添加元素;
3、查询列表元素的位置:find
function find(ele){
for(var i = 0; i < this.listSize; i++ ){
if(ele === this.dataList[i]){
return i;
}
}
return -1;
}
该方法查找元素的位置,如果找到就返回该元素的位置,否则就返回-1;
4、删除列表元素:remove
function remove(ele) { //删除元素
var index = this.find(ele);
if (index > -1) {
this.dataList.splice(index, 1);
this.listSize -= 1;
return true;
}
return false;
}
该方法删除列表元素,首先通过find()方法查询是否存在该元素,如果存在这获取其下标,通过splice()删除该元素;并且列表长度减1;
5、查询元素是否存在:contains
function contains(ele){
var index = this.find(ele);
if (index > -1) {
return true;
}
return false;
}
6、插入元素:insert
function insert(ele, after) { //插入元素
var index = this.find(after);
if (index > -1) {
this.dataList.splice(index + 1, 0, ele);
this.listSize += 1;
}else{
this.append(ele);
}
}
改方法实现往某个元素后面插入一个元素,首先使用find()方法查询在列表中是否存在after元素,如果存在就在after元素后面,插入ele元素;如果不存在,就在列表最后面插入;
7、查询列表长度:length
function length() { //列表长度
return this.listSize;
}
8、清空列表:clear
function clear() { //清空列表
delete this.dataList;
this.dataList = [];
this.pos = 0;
return true;
}
该方法清空列表,首先删除旧的列表,然后创建新的列表,指针重置为0;
9、获取当前位置的元素;getEle;
function getEle() {
return this.dataList[this.pos];
}
10、设置当前位置为开头:front
function front() { //设置当前位置是0
this.pos = 0;
}
11、设置当前位置是最后一个元素的位置:end
function end() {
this.pos = this.listSize - 1;
}
12、设置指针向前移一位:prev
function prev() {
if (this.pos > 0) {
this.pos -= 1;
} else {
this.front();
}
}
13、设置指针向后移一位:next
function next() { //设置当前位置向后移动
if (this.pos < this.listSize - 1) {
this.pos += 1;
} else {
this.pos = this.end();
}
}
14、获取当前指针的位置:currPos
function currPos() { //返回当前位置
return this.pos;
}
12、移动当指定位置:moveTo
function moveTo(position) { //移动当指定位置
if (position >= 0 && position <= this.listSize - 1) {
this.pos = position;
return true;
}
return false;
}
13、列表循环
首先,创建列表;
var list = new List();
然后,向列表导入数据
var arr = ['a','b','c','d','e'];
for(var i = 0;i < arr.length ; i ++){
list.append(arr[i]);
}
接着,循环列表
for(list.front;list.currPos < list.length(); list.next()){
console.log(list.getEle());
}
或者
for(list.end();list.currPos >= 0 ; list.prev()){
console.log(list.getEle());
}