C++ 数据结构(四)栈与队列(2)栈应用(1)进制转换

来源:我的博客站 OceanicKang |《C++ 数据结构(四)栈与队列(2)栈应用(1)进制转换》

上一篇:《C++ 数据结构(四)栈与队列(1)栈接口与实现》

典型应用场合

1、逆序输出(conversion)

输出次序与处理过程颠倒,递归深度和输出长度不易预知

2、递归嵌套(stack permutation + parenthesis)

具有自相似性的问题可递归描述,但分支位置和嵌套深度不固定

3、延迟缓冲(evaluation)

线性扫描算法模式中,在预读足够长之后,方能确定可处理的前缀

4、栈式计算(RPN)

基于栈结构的特定计算模式

进制转换

1.png

void convert(Stack<char> &S, __int64 n, int base) {
    // 新进制下的数位符号,可视 base 取值范围适当扩充
    static char digit[] = {'0', '1', '2', '3',
                           '4', '5', '6', '7',
                           '8', '9', 'A', 'B',
                           'C', 'D', 'E', 'F'};
    while (n > 0) { // 由低到高,逐一计算出新进制下的各位数
        S.push(digit[n % base]); // 余数(对应的数位)入栈
        n /= base; // n 更新为其对 base 的除商
    }
}

main() {
    Stack<char> S; convert(S, n, base); // 用栈记录转换得到的各数位
    while (!S.empty()) printf("%c", S.pop()); // 逆序输出
}

下一篇:《C++ 数据结构(四)栈与队列(2)栈应用(2)栈混洗与括号匹配》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值