世上焉有无双数,万般玄机谁可知,我本杯中一浮游,何来笑谈青莲久
栈,从解字上来说,是木戋,讲的是古人在悬崖峭壁上铸造可用于行走的通道,那时候人们利用栈来出入山,并在悬崖上进行开采与挖掘工作,
由于栈一般会比较窄,所以先进入的人总要等到他后面的人出去了,他才能出去,这种说法有点像杯子中的乒乓球,先放到杯子中的总是最后 一个拿出来,这也是为什么这种数据结构的命名叫栈,堆栈的说法也是如此。 所以我们需要一个东西来做容器,并且这个容器支持数据的存入,只是在取出的时候,只能从最后放入的开始取
function Stack() { this.length=0; this.Data=[]; //this.push=push; //this.pop=pop; //this.shift=shift;}复制代码
/* *向数据中写入数据,并且增加其长度 */Stack.prototype.push = function(ele) { // body... this.Data[this.length]=ele; this.length++; return true;};复制代码
/* *判断数据的长度,如果存在数据,就将最外层的取出,并且将长度缩短 */Stack.prototype.pop=function(ele){ // body... if(this.length==0){ return -1; }else{ var out=this.Data.splice(this.length-1,1); this.length--; return out; }}复制代码
/* *只获取最外层数据 */Stack.prototype.peek=function(){ if(this.length==0){ return -1; }else{ return this.Data[this.length-1]; } }复制代码
TEST:var a=new Stack();a.push(1);a.push("H");a.push(2);a.push("O");console.log(a.pop());复制代码
OUTPUT: O复制代码
基本实现与逻辑都还是很容易明白,比较难的是如何对抽象逻辑进行具现,一般的用处有如回文判断,X缀表达式等,当然也可以用来做堵塞处理,想像一下,用户被勾引到了一个页面里,发现什么都没有,想要登出却需要排队,等待后来的用户先登出,是不是感觉应用面很广呢,没事去堵那么几个人~