利用栈实现进制转换操作,顺序栈、链栈C语言代码
时间: 2024-10-16 14:06:47 浏览: 98
利用栈实现进制转换,通常是指将一种进制的数字逐位转换成另一种进制的过程。这里我们以十进制转二进制为例,因为这种转换比较简单,适合用栈来模拟。
首先,我们要明白从高位到低位处理每一位数字,当遇到的数字大于目标进制减一时,需要在栈里压入当前的值,并更新该位置的数字。这里是C语言的顺序栈(数组实现)示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int stack[MAX_STACK_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 入栈操作
void push(Stack *s, int value) {
if (s->top == MAX_STACK_SIZE - 1) {
printf("Stack overflow.\n");
return;
}
s->stack[++s->top] = value;
}
// 出栈操作
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return s->stack[s->top--];
}
// 十进制转二进制,利用栈辅助计算
void decimal_to_binary(int decimal, Stack *binary_stack) {
while (decimal > 0) {
push(binary_stack, decimal % 2);
decimal /= 2;
}
}
// 打印栈中的元素
void print_stack(Stack *s) {
for (int i = s->top; i >= 0; i--) {
printf("%d", s->stack[i]);
}
printf("\n");
}
int main() {
Stack binary_stack;
init(&binary_stack);
// 示例:将十进制数10转换为二进制
int decimal = 10;
decimal_to_binary(decimal, &binary_stack);
// 输出结果
printf("Binary representation: ");
print_stack(&binary_stack);
return 0;
}
```
这个程序会将十进制数10转换成二进制,然后打印出来。对于链栈,你可以使用链表结构来替代数组,其他部分的逻辑基本一致。
阅读全文