栈进制转化

Posted cjwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈进制转化相关的知识,希望对你有一定的参考价值。

第六周

要求:十进制转化为二进制和十六进制。用链栈存储数据

函数:

Status InitStack(LinkStack &S) //初始化

Status Push(LinkStack &S, SElemType e) //计算结果入栈

Status Pop(LinkStack &S, SElemType &e)//计算结果

int StackEmpty(LinkStack S) //判断栈S是否为空

Status DtoB(int N) //转化为二进制

Status DtoH(int N) //转化为十六进制

先定义结构类型为链栈

技术图片

初始化栈

Status InitStack(LinkStack &S)
{
    S = NULL;
    return OK;
}

 

入栈函数

Status Push(LinkStack &S, SElemType e)
{
    LinkStack p;
    p = new StackNode;
    if (!p) {
        return OVERFLOW;
    }
    p->data = e;
    p->next = S;
    S = p;
    return OK;
}

出栈函数

Status Pop(LinkStack &S, SElemType &e)
{
    LinkStack p;
    if (!S)
        return ERROR;
    e = S->data;
    p = S;
    S = S->next;
    delete p;
    return OK;
}

判断栈是否为空

int StackEmpty(LinkStack S)
{
    if (!S)
        return 1;
    else
        return 0;
}

转化为二进制函数

Status DtoB(int N)
{
    LinkStack S;
    SElemType e;
    InitStack(S);
    while (N) {
        Push(S, N % 2);
        N = N / 2;
    }
    while (!StackEmpty(S))
    {
        Pop(S, e);
        cout << e;
    }
    return OK;
}

转化为十六进制

Status DtoH(int N)
{
    LinkStack S;
    SElemType e;
    char H[] = "0123456789ABCDEF";
    InitStack(S);
    while (N) {
        Push(S, N % 16);
        N = N / 16;
    }
    while (!StackEmpty(S)) 
    {
        Pop(S, e);
        cout << H[e]; 
    }
    return OK;
}

测试函数

int main()
{
    int N;
    cout << "请输入一个非负的十进制整数:";
    cin >> N;
    cout << "对应的二进制数为:";
    DtoB(N);
    cout << "
";
    cout << "对应的十六进制数为:";
    DtoH(N);
}

运行结果

技术图片

 

以上是关于栈进制转化的主要内容,如果未能解决你的问题,请参考以下文章

栈应用之将二进制转化为十进制,八进制,十六进制

进制转化之递归 && 栈

用顺序栈实现十进制向二进制转化

java使用栈将很长十进制转化为二进制,积累总结

请教QT中怎么实现10进制数转换为16进制数 最好有代码

java:数据结构栈的应用(进制转换)