Files
LearnDataStructuresAndAlgor…/Chapter3/list.mjs
2024-07-04 22:38:39 +08:00

143 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
function append(element) {
// 元素追加后listSize 自增
this.dataStore[this.listSize++] = element;
}
function find(element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return i;
}
}
return -1;
}
function remove(element) {
const foundAt = this.find(element);
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1);
--this.listSize;
return true;
}
return false;
}
function length() {
return this.listSize;
}
function toString() {
return this.dataStore;
}
function insert(element, after) {
const insertPos = this.find(after);
if (insertPos > -1) {
this.dataStore.splice(after, 0, element);
++this.listSize;
return true;
}
return false;
}
function clear() {
delete this.dataStore;
this.dataStore.length = 0;
this.listSize = this.pos = 0;
}
function contains(element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return true
}
}
return false;
}
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;
}
const names = new List();
names.append('Clayton');
names.append('Raymond');
names.append('Cynthia');
names.append('Jennifer');
names.append('Bryan');
names.append('Danny');
names.front();
// console.log(names.getElement());
names.next();
// console.log(names.getElement());
names.next();
names.next();
names.prev();
// console.log(names.getElement());
// 从前往后遍历
for (names.front(); names.hasNext(); names.next()) {
console.log(names.getElement());
}
console.log('------------------------------------')
// 从后往前遍历
for (names.end(); names.hasPrev(); names.prev()) {
console.log(names.getElement());
}