最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JS中的算法与数据结构——栈(Stack)

    正文概述 掘金(healerhe)   2021-03-07   625

    JS中的算法与数据结构——栈(Stack)

    定义

    ,又叫堆栈,是和列表类似的一种数据结构,但是却更高效,因为栈内的元素只能通过栈顶访问,数据只能在栈顶添加或删除,遵循 先入后出(LIFO,last-in-first-out) 的原则。

    栈的属性和方法

    类型描述
    push()入栈pop()出栈peek()查看栈顶元素length()栈长度clear()清空站内元素top属性,查看当前栈顶位置

    栈的实现

    function Stack () {
        this.dataStore = [];    //初始化为空
        this.top = 0;           //记录栈顶位置
        this.pop = function() { //出栈
        	return this.dataStore[--this.top];
        };         
        this.push = function(element) { //入栈
        	this.dataStore[this.top++]=element;
        };               
        this.peek = function() { //查看栈顶元素
         	if( this.top > 0 ) return this.dataStore[this.top-1];
        	return 'Empty';
        };                
        this.length = function() { //查看栈内元素总数
        	return this.top;
        }; 
        this.clear = function() { //清空栈
        	delete this.dataStore;
        	this.dataStore = [];
        	this.top = 0;
        };
    }
    

    案例1:实现数制间的相互转换

    利用栈将一个数字从一种数制转换成另一种数制。例如将数字 n 转换成以 b 为基数的数字,可以采用如下算法(该算法只针对基数为 2-9 的情况)

    1. 最高位为 n % b , 直接压入栈;
    2. 使用 Math.floor(n / b) 来代替 n ;
    3. 重复上面的步骤,直到 n 为 0 ,并且没有余数;
    4. 以此将栈内元素弹出,直到栈空,并依次将这些元素排列,就得到了转换后的形式
    function baseConversion(num , base) {
    	var s = new Stack();
        while(num!==0) {
        	s.push(num % base);
            num = Math.floor(num/base);
        }
        var converted = '';
        while (s.length() > 0){
            converted += s.pop();
        }
        return converted;
    }
    

    案列2:判断一个字符串是不是回文

    回文是指一个字符串,从前往后写和从后往前写结果都是一样的,比如单词 'level' , 'racecar',就是回文,数字 1001 也是回文。 我们把字符串从左到右依次压入栈,这样,栈中保存了该字符串反转后的字符,我们再依次出栈,通过比较出栈后的字符串是否与原字符串是否相等,就可判断该字符串是否是回文。

    //回文判断
    
    function isPalindrome ( word ) {
        var s = new Stack();
        for( var i = 0 ; i < word.length ; i ++ ){
            s.push( word[i] );
        }
        var rword = '';
        while( s.length() > 0 ){
            rword += s.pop();
        }
    
        if( word == rword ){
            return true;
        }else{
            return false;
        }
    }
    
    console.log( isPalindrome('level') )    // true
    console.log( isPalindrome('1001') )     // true
    console.log( isPalindrome('word') )     // false
    

    另一种实现

    function isPalindrome ( word ){
        return String(word).split('').reverse().join('') == word ? true : false;
    }
    

    起源地下载网 » JS中的算法与数据结构——栈(Stack)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元