最近无意中看见了一本叫做《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());
|