栈的应用-进制转换

来源:互联网 发布:机顶盒网络灯红色 编辑:程序博客网 时间:2024/04/29 19:34

使用栈来实现进制转换,栈的实现可以参考前面的.

// 数字转换为字符int number_to_char(char n){    if (n < 10)     // [0-9] -> ['0'-'9']    {        n += '0';    }    else if (n < 17)// [10-16] -> ['A'-'F']    {        n += 55;    }    return n;}// 进制转换// 先把最低位依次入站,则栈顶就是最高位// 然后所有元素都出栈就可以了int conversion(int n, int base, char *buffer, size_t size){    assert(buffer);    assert((2==base) || (8==base) || (16==base));    stack_t stack;    stack_init(stack);    do    {        // 把最低位转换为字符,放到栈里面        stack_push(stack, number_to_char(n % base));        n /= base;  // 去掉最低位    } while (n != 0);    n = 0;    --size;    while (n < size)    {        element_t e = 0;        if (!stack_pop(stack, e))        {            break;        }        buffer[n] = (char)e;        ++n;    }    buffer[n] = '\0';    stack_destory(stack);}void test_conversion(){    char buffer_02[32];    char buffer_08[32];    char buffer_16[32];    for (int i=0; i<32; ++i)    {        conversion(i,  2, buffer_02, sizeof(buffer_02));        conversion(i,  8, buffer_08, sizeof(buffer_08));        conversion(i, 16, buffer_16, sizeof(buffer_16));        printf("%2d %10s%10s%10s\n", i, buffer_02, buffer_08, buffer_16);    }}


0 0
原创粉丝点击