列表的抽象数据类型定义
属性/方法 | 描述 |
---|---|
listSize(属性) | 列表的元素个数 |
pos(属性 | 列表的当前位置 |
length(属性) | 返回列表中元素的个数 |
clear(方法) | 清空列表中的所有元素 |
toString(方法) | 返回列表的字符串形式 |
getElement(方法) | 返回当前位置的元素 insert(方法) |
front(方法) | 将列表的当前位置设移动到第一个元素 |
end(方法) | 将列表的当前位置移动到最后一个元素 |
prev(方法) | 将当前位置后移一位 |
next(方法) | 将当前位置前移一位 |
currPos(方法) | 返回列表的当前位置 |
moveTo(方法) | 将当前位置移动到指定位置 |
1. 通过构造函数定义 list 类
function list() {
this.listSize = 0;
this.pos = 0;
this.length = length;
this.dataStore = []; // 用来保存元素
this.find = find;
this.clear = clear;
this.insert = insert;
this.append = append;
this.remove = remove;
this.contains = contains;
this.toString = toString;
this.getElement = getElement;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.currPos = currPos;
this.moveTo = moveTo;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2. 分别实现clear,insert等方法。
1 find: 查找元素
function find(ele) {
for (var i = 0; i < this.; i++) {
if (this.dataStore[i] == ele) {
return i;
}
}
return -1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注: 个人认为方法内部可以使用查找算法,提高查找效率。
2 clear:清除元素
function clear() {
// = [];
this.= 0;
this.listSize = 0;
this.pos = 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
注:对比勘误列表,修改此处。勘误列表地址
= [];
- 1
为
this.dataStore.length = 0;
- 1
原文解释如下:
Any reference to the List or to the datastore will contain the old values if = [] is used.
示例如下:
var arr = [1, 2, 3];
var arr1 = arr;
arr = [];
console.log(arr1); // [1, 2, 3]
arr = [1, 2, 3];
arr1 = arr;
arr.length = 0;
console.log(arr1); // []
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3 insert: 插入元素到某一元素之后
function insert(ele, afterEle) {
var insertPos = this.find(afterEle);
if (insertPos === -1) {
return false;
}
this.(insertPos+1, 0, ele);
this.listSize++;
return true;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4 append: 插入元素到末尾
function append(ele) {
this.dataStore[this.listSize++] = ele;
}
- 1
- 2
- 3
5 remove: 移除某一元素
function remove(ele) {
var findAt = this.find(ele);
if (findAt === -1) {
return false;
}
this.(findAt, 1);
this.listSize--;
return true;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
6 contains: 判断是否存在某一元素
function contains(ele) {
for (var i = 0; i < this.; i++) {
if (this.dataStore[i] == ele) {
return true;
}
}
return false;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
7 toString: 返回列表数据
function toString() {
return this.dataStore;
}
- 1
- 2
- 3
8 length: 返回列表元素个数
function length() {
return this.listSize;
}
- 1
- 2
- 3
9 遍历列表: front, end, prev, next, getElement, currPos, moveTo
1 front: 移动当前位置到第一个元素
function front() {
this.pos = 0;
}
- 1
- 2
- 3
2 end:移动当前位置到最后一个元素
function end() {
this.pos = this.listSize - 1;
}
- 1
- 2
- 3
3 prev: 移动当前位置到前一个元素
function prev() {
if (this.pos > 0) {
this.pos--;
}
}
- 1
- 2
- 3
- 4
- 5
4 next: 移动当前位置到后一个元素
function next() {
if (this.pos < this.listSize -1) {
this.pos++;
}
}
- 1
- 2
- 3
- 4
- 5
5 currpos: 返回当前位置
function currPos() {
return this.pos;
}
- 1
- 2
- 3
6 getElement: 返回当前位置的元素
function getElement() {
return this.dataStore[this.pos];
}
- 1
- 2
- 3
7 moveTo: 移动到某一位置
function moveTo(pos) {
this.pos = pos;
}
- 1
- 2
- 3