您的位置:首页 > 其它

进制转换(栈的应用code)

2017-08-06 16:19 323 查看
进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。

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

首先我们先建立栈,并且保证其具有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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: