1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>List实现</title> 6 </head> 7 <body> 8 <script> 9 /*列表的抽象数据类型定义: 10 listSize 属性 列表中元素个数 11 pos 属性 列表的当前位置 12 length 属性 返回列表中元素的个数 13 clear 方法 清空列表中的所有元素 14 toString 方法 返回列表的字符串形式 15 getElement方法 返回当前位置的元素 16 insert 方法 在现有元素后插入新的元素 17 append 方法 在列表的末尾添加新元素 18 remove 方法 从列表中删除元素 19 front 方法 将列表的当前位置移动到第一元素 20 end 方法 将列表的当前位置移动到最后一个元素 21 prev 方法 将当前位置上移一位 22 next 方法 将当前位置下移一位 23 currPos 方法 返回列表当前位置 24 moveTo 方法 将当前位置移动到指定位置 25 */ 26 27 //实现列表类 28 function List(){ 29 this.listSize = 0; 30 this.pos = 0; 31 this.arr = []; 32 this.clear = clear; 33 this.find = find; 34 this.toString = toString; 35 this.insert = insert; 36 this.append = append; 37 this.remove = remove; 38 this.front = front; 39 this.end = end; 40 this.prev = prev; 41 this.next = next; 42 this.currPos = currPos; 43 this.moveTo = moveTo; 44 this.getElement = getElement; 45 this.length = length; 46 this.contans = contains; 47 } 48 49 //append方法 50 function append(ele){ 51 this.arr[this.listSize++] = ele; 52 } 53 54 //查找元素的位置 55 function find(ele){ 56 for(var i=0;i<this.arr.length;i++){ 57 if(this.arr[i] == ele){ 58 return i 59 } 60 } 61 return -1; 62 } 63 64 //删除元素 65 function remove(ele){ 66 var index = this.find(ele); 67 if(index >-1){ 68 this.arr.splice(index,1); 69 this.listSize--; 70 return true 71 } 72 return false 73 } 74 75 //列表长度 76 function length(){ 77 return this.listSize; 78 } 79 80 //显示列表中的元素 81 function toString(){ 82 return this.arr; 83 } 84 85 86 var obj = new List(); 87 obj.append("zhangsan"); 88 obj.append("lisi"); 89 obj.append("zhaowu"); 90 console.log(obj.toString()); 91 console.log(obj.length()); 92 obj.remove("lisi"); 93 console.log(obj.toString()); 94 95 //插入元素 96 function insert(ele,after){ 97 var insertPos = this.find(after); 98 if(insertPos > -1){ 99 this.arr.splice(insertPos+1,0,ele); 100 this.listSize++; 101 return true; 102 } 103 return false; 104 } 105 106 //清空元素 107 function clear(){ 108 delete this.arr; 109 this.arr = []; 110 this.listSize = this.pos = 0; 111 } 112 113 //给定值是否在列表中 114 function contains(ele){ 115 for(var i=0;i<this.arr.length;i++){ 116 if(this.arr[i] == ele){ 117 return true; 118 } 119 } 120 return false; 121 } 122 123 //遍历列表 124 function front(){ 125 this.pos = 0; 126 } 127 function end(){ 128 this.pos = this.listSize - 1; 129 } 130 function prev(){ 131 if(this.pos>0){ 132 --this.pos; 133 } 134 } 135 function next(){ 136 if(this.pos < this.listSize - 1){ 137 ++this.pos; 138 } 139 } 140 function currPos(){ 141 return this.pos; 142 } 143 function moveTo(position){ 144 this.pos = position; 145 } 146 147 function getElement(){ 148 return this.arr[this.pos]; 149 } 150 151 152 var names = new List(); 153 names.append("zhangsan"); 154 names.append("lisi"); 155 names.append("wangwu"); 156 names.append("zhaoliu"); 157 158 names.front(); 159 console.log(names.getElement()); 160 names.next(); 161 console.log(names.getElement()); 162 names.prev(); 163 console.log(names.getElement()); 164 165 // 使用迭代器访问列表 166 for(names.front();names.currPos()<=names.length();names.next()){ 167 console.log(names.getElement(),"正序"); 168 169 //由于prev()和 next() 做了判断,为避免死循环,这里也要做判断 下面也一样 170 if(names.currPos() == names.length()-1) break; 171 } 172 173 for(names.end();names.currPos() >=0;names.prev()){ 174 console.log(names.getElement(),"反序"); 175 if(names.currPos() == 0) break; 176 } 177 178 179 180 </script> 181 </body> 182 </html>