利用栈实现进制转换操作,顺序栈,链栈C语言代码
时间: 2024-10-22 17:29:37 浏览: 40
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
利用栈实现进制转换,特别是从十进制到其他进制的过程,可以采用模拟除法的方式。这里我们以将整数转换为二进制为例,因为它是最直观的。在C语言中,我们可以使用数组来表示栈,这里先假设栈容量足够大。
对于顺序栈,我们可以创建一个动态大小的数组`stack[]`来存放中间结果:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
// 定义栈结构体
typedef struct {
int top;
int stack[MAX_STACK_SIZE];
} Stack;
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 == 0) {
printf("Stack underflow!\n");
return -1; // 返回错误码
}
return s->stack[--s->top];
}
// 转换函数
char* convertToBinary(int num) {
Stack binaryStack;
binaryStack.top = 0;
while (num > 0) {
push(&binaryStack, num % 2);
num /= 2;
}
char* result = (char*)malloc(sizeof(char) * (binaryStack.top + 1)); // 预留一位用于补零
result[binaryStack.top] = '\0';
for (int i = binaryStack.top - 1; i >= 0; i--) {
result[i] = '0' + binaryStack.stack[i];
}
return result;
}
int main() {
int number = 42;
char* binary = convertToBinary(number);
printf("Number %d in binary is %s\n", number, binary);
free(binary); // 释放内存
return 0;
}
```
对于链栈,你可以使用双向链表来代替数组,但原理不变。关键在于维护当前位的值和进位状态。注意,这个例子没有包含链栈的具体实现,因为链表涉及到更多的指针操作,但基本思路是一致的。
阅读全文