JavaScript数据结构-3.List

  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>
原文地址:https://www.cnblogs.com/chengyunshen/p/7191866.html