首先来科普一下数据结构中的栈是什么:
专业术语:
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
----
其实专业术语并不难懂,但是为了大家更通俗易解一些,下面用图示来给大家解释一下数据结构中的栈:
可以把栈理解成一个杯子,可以一直往杯子里面放数据,但是放入的数据并不可以灵活调用,最先放入的数据库将被放入杯子最底部,然后再放入一个数据将在这个最先放入的数据的上面,然后一次叠加,这叫做压栈。
如果你想取出最低下的数据,或者其他数据,就得以此弹出这些数据,直到弹到你想要的数据,这叫弹栈。
接下来加上代码:
我们先定义一个存放数据的类
function Node(value){
this.value = value; // 用于指向传入的数据
this.point = null; // 用于指向上一个传入的数据 后面会用到
}
我们再定义一个栈类:
function Stack(){
this.top = null;//栈顶指针
this.bottom = null;//栈底指针
this.push=function(value){ //压栈
node = new Node(value);
if(this.bottom!=null){ //当this.bottom指向的节点不为null时 则把 node.point的节点指向this.top以前指向的地方,并且把this.top指向新传进来的节点 (2)图 就这样 来回叠加 this.top 不断指向新传入的节点 也就是最顶点 而node.point也是不断上方节点指向下方节点 如 (3)图
node.point = this.top;
this.top = node;
}else{ //如果this.bottom指向的节点为null 那证明是第一次传入数据节点 那么将this.bottom 和 this.top都指向新传入的这个节点就ok (1)图
this.bottom = node;
this.top = node;
}
}
this.pop = function(){ //弹栈
node = null;
if(this.top!=null){ //当this.top不为null时,node表示为 最顶点的数据节点 this.top,并将this.top变为最顶点节点的下面的节点
node = this.top;
this.top = node.point;
if(this.top==null){ //当this.top一直往下变为null时 this.top 将不再变化 最底层的this.bottom也会变成null
this.bottom = null;
}
}
return node; //每执行一次 将 node弹出一次 也就是将最顶层的 数据结点弹出一次
}
}