javastript实现栈

来源:互联网 发布:pop3 smtp 端口 编辑:程序博客网 时间:2024/05/16 07:39

      栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行。这一端称为栈顶,另一端称为栈底。就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走。栈具有“后进先出”的逻辑特性。栈在计算机科学中有着广泛的应用,递归函数的实现就利用了栈这种数据结构,在递归时,计算机会维护一个递归工作栈,当一个递归函数被调用时,被调函数的局部变量、形参的值以及一个返回地址就会储存在递归工作栈中。运行时按照后进先出的顺序,进行函数执行,完成递归操作。编译原理中也多次使用栈这种数据结构~
先进先出

栈是一种特殊的线性表,故其在存储结构上也有链式存储和顺序存储两种。代码如下:

链式存储:

//链式存储function linkedStack(){    var Node = function(element){        this.element = element;        this.next = null;    }    var top,length=0;    //进栈    this.push = function(element){        var node = new Node(element);        if(!top){            top = node;            return        }else{            node.next = top;            top = node;            return          }        length++;    }    //出栈    this.pop = function(){        var curren = top.next;;        if(curren){            top= curren.next ;            curren.next = null;            length--;            return curren        }else{            return "该栈已无数据"        }    }    //获取最近进入的数据    this.top = function(){        return top.element    }    //获取栈长度    this.length = function(){        return length    }    //将栈转换为字符串    this.toString = function(){    var string = '',current = top;        while(current){            current= current.next;            string+=current.element;            return string        }    }}

顺序存储:

//顺序栈的JS实现 这里直接使用了JS内置的Array对象  function ArrayStack(){      var arr = [];          //压栈操作      this.push = function(element){          arr.push(element);      }          //退栈操作      this.pop = function(){          return arr.pop();      }          //获取栈顶元素      this.top = function(){          return arr[arr.length-1];      }          //获取栈长      this.size = function(){          return arr.length;      }          //清空栈      this.clear = function(){          arr = [];          return true;      }        //将栈各个数据以字符串输出,中间以逗号分隔    this.toString = function(){          return arr.toString();      }  }  

转载自 http://www.cnblogs.com/zhuwq585/p/6075115.html

原创粉丝点击