//算法-----列表 /* * 列表是一组有序的数据。每个列表中的数据项称为元素。在 JavaScript 中,列表中的元素 可以是任意数据类型。列表中可以保存多少元素并没有事先限定,实际使用时元素的数量 受到程序内存的限制 列表的抽象数据类型定义: listSize(属性) 列表的元素个数 作为内部属性 pos(属性) 列表的当前位置 dataStore: 初始化一个空数组保存列表元素 length(方法) 返回列表中元素的个数 clear(方法) 清空列表中的所有元素 toString(方法) 返回列表的字符串形式 getElement(方法) 返回当前位置的元素 insert(方法) 在现有元素后插入新元素 append(方法) 在列表的末尾添加新元素 remove(方法) 从列表中删除元素 front(方法) 将列表的当前位置设移动到第一end(方法) 将列表的当前位置移动到最后一prev(方法) 将当前位置后移一位 next(方法) 将当前位置前移一位 currPos(方法) 返回列表的当前位置 moveTo(方法) 将当前位置移动到指定位置 * */ //实现列表数据结构 function append(element) { this.dataStore[this.listSize++] = element; } function find(element) { for(var i = 0; i< this.dataStore.length;i++) { if (element === this.dataStore[i]) { return i; } } return -1; } function remove(element) { var index = this.find(element); if (index > -1) { this.dataStore.splice(index,1); --this.listSize; return true; } return false; } function length() { return this.listSize; } function toString() { return this.dataStore.toString(); } function insert(element,after) { var index = this.find(after); if (index > -1) { this.dataStore.splice(++index,0,element); this.listSize++; return true; } return false; } function clear() { delete this.dataStore; this.dataStore = []; this.listSize = 0; this.pos = 0; } function contains(element) { for(var i = 0; i< this.dataStore.length;i++) { if (element === this.dataStore[i]) { return true; } } return false; } function front() { this.pos = 0; } function end() { this.pos = this.dataStore.length -1 ; } function prev() { if (this.pos > 0){ this.pos--; } } function next() { if (this.pos <= this.listSize - 1) { this.pos++; } } function currPos() { return this.pos; } function moveTo(position) { this.pos = position } function getElement() { return this.dataStore[this.pos]; } 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.length = length; this.currPos = currPos; this.moveTo = moveTo; this.getElement = getElement; this.contains = contains; } function createMovies(url) { var arr = fs.readFileSync(url,"utf-8").split(' '), len = arr.length; for(var i= 0;i< len;i++){ arr[i] = arr[i].trim(); } return arr; } var Customer = function (name,movie) { this.name = name; this.movie = movie; }; //借出影碟 /** * 用户拿走影碟 * @param name 用户的名字 * @param movie 影碟的名字 * @param movieList 所有影碟列表 * @param customerList 用户列表 */ function checkOut(name,movie,movieList,customerList) { if (movieList.find(movie) > -1){ var user = new Customer(name,movie); customerList.append(user); movieList.remove(movie); }else { console.log("没有该电影") } } function displayList(list) { for(list.front();list.currPos() < list.length();list.next()) { console.log(list.getElement()) } } var fs = require("fs"); var ms = createMovies("./my.txt"); var movieList = new List(); //电影列表 var customers = new List(); //用户列表 for(var i = 0 ; i < ms.length;i++){ movieList.append(ms[i]); } checkOut("Jane","教父",movieList,customers); displayList(customers); console.log("========"); displayList(movieList); // names.append("Clayton"); // names.append("Raymond"); // names.append("Cynthia"); // names.append("Jennifer"); // names.append("Bryan"); // names.append("Danny"); // // console.log(names.toString()); // // names.front(); // // console.log(names.getElement()); // // names.next(); // // console.log(names.getElement())