用JavaScript来实现栈

来源:互联网 发布:2017软件开发工资 编辑:程序博客网 时间:2024/06/05 02:05

栈的定义

栈(Stack)是一种遵从后进先出(Last in, first out。简称LIFO)原则的有序集合。

定义栈的方法

压栈

方法:push()
语法:arrayStack.push(element1,element2…elementX)
参数:至少有一个元素
描述:添加一个或几个新元素到栈顶,无返回值。

退栈

方法:pop()
语法:arrayStack.pop()
参数:无
描述:移除栈顶的元素,同时返回被移除的元素

返回栈顶元素

方法:peek()
语法:arrayStack.peek()
参数:无
描述:仅仅返回栈顶元素

栈是否为空

方法:isEmpty()
语法:arrayStack.isEmpty()
参数:无
描述:如果栈中没有任何元素则返回true,否则返回false

清空栈

方法:clear()
语法:arrayStack.clear()
参数:无
描述:移除栈中的所有元素

返回栈的长度

方法:size()
语法:arrayStack.size()
参数:无
描述:返回栈中元素的个数

输出栈

方法:show()
语法:arrayStack.show()
参数:无
描述:返回栈中的所有元素

代码实现

通过动态原型模式创建栈类型

 function Stack() {        this.items = [];        //初始化栈方法        if (typeof Stack.prototype.push != "function") {            //压栈            Stack.prototype.push = function() {                                    var len = arguments.length;                    if (len == 0) {                        return undefined;                    }                    for(var i=0;i<len;i++){                        this.items.push(arguments[i])                                        }                }                }            //退栈            Stack.prototype.pop = function() {                    return this.items.pop();                }            //返回栈顶元素            Stack.prototype.peek = function() {                    return this.items[items.length - 1];                }            //栈是否为空            Stack.prototype.isEmpty = function() {                    return this.items.length==0;                }            //返回栈长度            Stack.prototype.size=function(){                    return this.items.length;            }            //清空栈            Stack.prototype.clear=function() {                    this.items=[];            }            //返回栈            Stack.prototype.show = function() {                return this.items;            }        }    }   }

十进制转二进制

function divideBy2(decNumber){        var remStack=new Stack(),            rem,            binaryString='';        while(decNumber>0){            rem=Math.floor(decNumber%2);            remStack.push(rem);            decNumber=Math.floor(decNumber/2);        }        while(!remStack.isEmpty()){            binaryString+=remStack.pop().toString();        }        return binaryString;    }
原创粉丝点击