列表

实现抽象数据类型定义

名称 属性与方法 含义
count 属性 列表元素个数
pos 属性 列表当前位置
length 属性 返回列表元素个数
clear 方法 清空列表
find 方法 查找元素在列表中的位置
contains 方法 查找元素是否在列表中
toString 方法 返回列表字符串形式
getElement 方法 返回当前元素
insert 方法 在现有元素后插入新元素
append 方法 列表末尾添加新元素
remove 方法 从列表中删除元素
front 方法 将当前位置移动到第一个元素
end 方法 将当前位置移动到最后一个元素
prev 方法 将当前位置前移一位
next 方法 将当前位置后移一位
currentPos 方法 返回列表当前位置
moveTo 方法 将当前位置移动到指定位置

实现列表类

function size(){
  return this.count;
}

function clear() {
  delete this.store;
  this.store = [];
  this.count = this.pos = 0;
}

function find(element) {
  for(var i = 0, len = this.store.length; i < len; i++) {
    if(this.store[i] === element) {
      return i;
    }
  }
  return -1;
}

function contains(element) {
  var foundAt = this.find(element);
  if(foundAt > -1) {
    return true;
  } else {
    return false;
  }
}

function toString(){
  return this.store;
}

function getElement(){
  return this.store[this.pos];
}

function insert(element, after){
  var foundAt = this.find(element);
  if(foundAt > -1) {
    this.store.splice(foundAt+1, 0, element);
    ++this.count;
    return true;
  } else {
    return false;
  }
}

function append(element){
  this.store[this.count++] = element;
}

function remove(element){
  var foundAt = this.find(element);
  if(foundAt > -1) {
    this.store.splice(foundAt, 1);
    --this.count;
    return true;
  } else {
    return false;
  }
}

function front(){
  this.pos = 0;
}

function end(){
  this.pos = this.count - 1;
}

function prev(){
  if(this.pos > 0) {
    --this.pos;
  }
}

function next(){
  if(this.pos < this.count) {
    ++this.pos;
  }
}

function currentPos(){
  return this.pos;
}

function moveTo(pos){
  this.pos = pos;
}

// 实现列表类
function List() {
  this.count = 0;
  this.pos = 0;
  this.store = [];
  this.size = size;
  this.clear = clear;
  this.find = find;
  this.contains = contains;
  this.toString = toString;
  this.getElement = getElement;
  this.insert = insert;
  this.append = append;
  this.remove = remove;
  this.front = front;
  this.end = end;
  this.prev = prev;
  this.next = next;
  this.currentPos = currentPos;
  this.moveTo = moveTo;
}

实现借阅类

function Borrow(name, book) {
  this.name = name;
  this.book = book;
}

实例化并展示

var bookList = new List()
var borrowList = new List();
var allBooks = ['西游记', '红楼梦', '水浒传', '三国演义', '金瓶梅'];
for(var i = 0, len = allBooks.length; i < len; i++) {
  bookList.append(allBooks[i])
}

function displayList(list){
  for(list.front(); list.currentPos() < list.size(); list.next()) {
    var ele = list.getElement();
    if(!(ele instanceof Borrow)) {
      console.log((list.pos + 1) + '. ' + ele);
    }
  }
}

function borrowBook(name, book, books, borrows){
  if(books.contains(book)){
    var borrow = new Borrow(name, book);
    borrows.append(borrow);
    books.remove(book);
    console.log('%s同学于 ' + new Date().toLocaleString() + ' 借阅 《%s》!', name, book)
  } else {
    console.log('%s同学于 ' + new Date().toLocaleString() + ' 借阅 《%s》,此书已借走或书库没有此书!', name, book)
  }
}

console.log('=> 当前书库一用有 %d 本书', bookList.size())
displayList(bookList)
console.log('--------------------------------\n')

console.log('=> 借书记录:')
borrowBook('张三', '水浒传', bookList, borrowList);
borrowBook('李四', '三国演义', bookList, borrowList);
borrowBook('王五', '平凡的世界', bookList, borrowList);
borrowBook('李六', '金瓶梅', bookList, borrowList);
borrowBook('赵七', '金瓶梅', bookList, borrowList);
displayList(borrowList)
console.log('--------------------------------\n')

console.log('=> 当前书库一用有 %d 本书', bookList.size())
displayList(bookList)

资源

github地址

results matching ""

    No results matching ""