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>