最近无意中看见了一本叫做《JavaScript 数据结构与算法》的书 ,以前我对数据结构算法这些很不感冒,一听到这类比较恼火的也感觉很难的东西就退却三尺 ,但是现在 js 也可以运行在了服务器端我想算法和数据结构也有了用武之地。随着 nodejs 的发展推动了前端向更加自动化模块化 且能够开发大型应用的方向发展。所以学习算法和数据结构也是我们必须了解和掌握的基础知识。因为越向上面走,需要的基础知识要越踏实。俗话说得好树无根就无叶,说的就是打好基础的重要性。 好了废话不多说我们来说说数据结构中的列表的运用场景,主要用于数据不是很多也不是很复杂的情况,比如说购物车、音乐歌曲列表等。 下面列出适合和不适合使用列表的情况: 适合使用在:当列表的元素不是很多的情况下,可以使用列表,因为对列表中的元素查找或者排序时,效率还算非常高,反之:如果列表元素非常多的情况下,就不适合使用列表了。 一:列表的抽象数据类型定义 为了设计列表的抽象数据类型,我们需要给出列表的定义,包括列表应该拥有哪些属性,应该在列表上执行哪些操作等。 列表是一组有序的数据。每个列表中的数据项称为元素。在 javascript 中,列表中的元素可以是任意数据类型。列表中可以保存多少元素并没有事先约定。但是实际使用时元素数量受到程序内存的限制。 现在我们想设计一个列表,那么我们可以想想实现一个列表,他们应该包含哪些属性和方法,当然我下面的设计都是根据 “javascript 数据结构与算法” 书上的 demo 来设计的,为止我们可以学习下,如果以后我们编写程序时,该如何来设计我们自己的抽象类来作为一个参考,我们现在学习书上的 demo 最主要的是学习他们中的设计思想及编写代码的方式。他们有如下属性; 1. listSize(属性):使用一个 listSize 变量来保存列表中元素的个数。 2. pos(属性):  列表的当前位置,元素的索引。 3. dataStore(属性): 初始化一个空数组来保存元素的个数。如果我们想取得具体的列表中的元素 可以使用上面的 pos 属性;如 dataStore[pos]; 所有的方法;如下列表解释,不一一介绍了。 二:如何实现列表类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114


//这里我们需要定义一个列表类

function List(){
//首先定义一些个属性
this.listSize = 0;
this.pos = 0;
this.dataStore=[];

}
List.prototype={
append:function(data){
this.dataStore[this.listSize++]=data;
},
remove:function(element){
var foundAt = this.find(element);
if(foundAt>-1){
this.dataStore.splice(foundAt,1);
--this.listSize;
return true;
}
return false;
},
find:function(element){
for (var i = 0; i < this.dataStore.length; i++) {
if(element == this.dataStore[i]){
return i;
}
}
return -1;
},
length:function(){
return this.listSize;
},
toString:function(){
return this.dataStore;
},
insert:function(element,after){
var afterpos = this.find(after);
if(afterpos >-1){
this.dataStore.splice(afterpos+1,0,element);
++this.listSize;
return true;
}
return false;
},
clear:function(){
delete this.dataStore;
this.pos = this.listSize= 0;
this.dataStore = [];
},
contains:function(element){
for (var i = 0; i < this.dataStore.length; i++) {
if(element === this.dataStore[i]){
return true;
}
}
return false;
},
front:function(){
this.pos = 0;
},
end:function(){
this.pos = this.listSize-1;
},
prev:function(){
if(this.pos > 0){
--this.pos;
}
},
next:function(){
if(this.pos<this.listSize-1){
++this.pos;
}
},
curPos:function(){
return this.pos;
},
moveTo:function(position){
this.pos = position;
},
getElement:function(){
return this.dataStore[this.pos];
}

};

var names = new List();
names.append('laike');
names.append('clayton');
names.append('raymond');
names.append('jenifer');
names.append('bryan');
names.append('danny');

names.front();
console.log(names.getElement());

names.next();
console.log(names.getElement());
names.next();
names.prev();
console.log(names.getElement());

console.log(names.contains('laike'));

names.remove('laike');
console.log(names.contains('laike'));
names.insert('laike','jenifer');
console.log(names.contains('laike'));
console.log(names.toString());