栈的应用——逆序输出和括号匹配

1逆序输出

在栈所擅长解决的典型问题中,有一类具有以下特征:首先,虽有明确的算法,但其解答却以线性序列的形式给出;其次无论递归还是迭代实现,该序列都是依逆序计算书吃的。最后,输入和输出规模的不确定,难以实现确定盛放输出数据的容器大小。因其特有的“后进先出”特性及其在容量方面的自适应性,可使用栈来解决此类问题。

进制转换:

任给十进制整数n,将其转换为λ进制的表示形式。

void convert(stack<char>& S,_int64 n,int base){//十进制正整数n到base进制的转换(递归版)
    static char digit[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//新进制下的数位符号
    if(0<n){
        S.puch(digit[n%base]); //逆向记录当前最低位,再通过递归得到所有最低位
        convert(S,n/base,base);
    }
}//新进制下由高到低的各数位,自顶而下保存于栈S中

在计算结束后只需通过反复的出栈操作即可由高到低的将其顺序输出。

void convert(Stack<char>& S,_int64 n,int base){//十进制n到base进制的转换(迭代版)  
    static char digit[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    while(n>0){//由高到低,助益计算出新进制下的各数位
        int remainder=(int)(n%base);
        S.puch(digit[remainder]);//余数入栈
        n/=base;//n更新为其对base的除商
    }
}

猜你喜欢

转载自www.cnblogs.com/biwangwang/p/11332465.html