堆栈--十进制转换成二进制、八进制、十六进制
2012-10-26 20:14
169 查看
使用堆栈的后进先出的原理,实现十进制转换成二进制、八进制、十六进制:
根据十进制转换其余进制的原理,对十进制取余。然后根据LIFO:4、0、5、2放进堆栈,出来的时候就是转换好的八进制的2504。
执行结果:
根据十进制转换其余进制的原理,对十进制取余。然后根据LIFO:4、0、5、2放进堆栈,出来的时候就是转换好的八进制的2504。
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #define STACK_SIZE 1024 typedef struct { int *base; int *top; int stack_size; }STACK; int stack_init(STACK *s) { s->base = (int *)malloc(STACK_SIZE * sizeof(int)); if (s->base == NULL) { return -1; } s->top = s->base; s->stack_size = STACK_SIZE; return 0; } void stack_destroy(STACK *s) { free(s->base); s->base = s->top = NULL; s->stack_size = 0; } int stack_length(STACK *s) { int length = 0; length = s->top - s->base; return length; } int stack_empty(STACK *s) { if (s->top == s->base) { return 1; } else { return 0; } } int stack_push(STACK *s, int e) { if (stack_length(s) >= s->stack_size) { return -1; } *(s->top) = e; s->top++; return 0; } int stack_pop(STACK *s, int *e) { if (stack_length(s) == 0) { return -1; } s->top--; *e = *(s->top); return 0; } int main(int argc, char *argv[]) { STACK *s; int n = 0, type = 0;; int elem; if (argc < 3) { printf("usage: ./conversion <2 8 16 > < num>\n"); return -1; } type = atoi(argv[1]); n = atoi(argv[2]); s = (STACK *)malloc(sizeof(STACK)); if (s == NULL) { return -1; } stack_init(s); while(n > 0) { stack_push(s, n % type); n = n / type; } while(stack_empty(s) == 0) { stack_pop(s, &elem); printf("%d", elem); } putchar('\n'); return 0; }
执行结果:
相关文章推荐
- 二进制 八进制 十进制 十六进制 转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- java十进制转换为二进制、八进制和十六进制
- 二进制、八进制、十进制、十六进制之间转换加总结
- 如何将十六进制转换为、二进制、八进制、十进制
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- 二进制,八进制,十进制,十六进制之间的转换
- 二进制、八进制、十进制、十六进制之间转换
- C++ 二进制、十进制、八进制和十六进制 转换
- JS十进制,十六进制,八进制,二进制他们的转换总结
- 栈的应用之二进制转换为十进制,八进制和十六进制
- AS3中,二进制转成十进制和八进制、十六进制相互转换
- 二进制、八进制、十进制、十六进制之间的转换
- 二进制、八进制、十进制、十六进制之间转换
- java中十进制转换为二进制、八进制和十六进制
- 进制转换:二进制、八进制、十六进制、十进制之间的转换
- 二进制、八进制、十进制、十六进制之间的转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- 十六进制之间的转换(二进制、八进制、十六进制、十进制)
- 二进制、八进制、十进制、十六进制之间的转换