进制转换(栈的应用code)

xiaoxiao2021-02-28  55

进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。

本文基于栈这一工具实现进制的转换,主要是因为在数学上,我们利用短除法来解决这一问题,先求得的余数在表达上放在最后,这种机制跟栈的机制很像。

首先我们先建立栈,并且保证其具有initial(),pop(),push(),is_empty()等基本操作。代码如下:

1.建立一个关于栈的结构体:

typedef struct stack { char* base; char* top; int lengrh; }stack;

2.initial()等操作函数:

void initial_stack(int n, stack* s) { s->base = (char*)malloc(n * sizeof(char)); s->lengrh = n; s->top = s->base; } void push_stack(char ch, stack* s) { if (s->top - s->base == s->lengrh) { printf("full"); return; } *(s->top++) = ch; void pop_stack(stack* s) { if (s->top == s->base) { printf("empty"); return; } printf("%c ", *--s->top); } bool empty(stack* s) { if (s->base == s->top) return true; else return false; } void get_top(stack* s) { printf("%c ", *(s->top - 1)); } void clearn_stack(stack* s) { if (s->base) free(s->base); }

3.进制转换

void number_convert(stack* s, int value,int hex) { char digit[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; do { push_stack(digit[value % hex], s); } while (value /= hex); while(empty(s)==false) { pop_stack(s); } }
转载请注明原文地址: https://www.6miu.com/read-53869.html

最新回复(0)