基于链栈的进制转换C
时间: 2024-08-13 16:05:24 浏览: 54
在C语言中,基于链栈的进制转换通常用来将一个数字从一种进制转换为另一种进制,比如十进制转二进制或十六进制。链栈在这里作为数据结构,可以帮助我们逐步处理每一位数,因为链表的插入和删除操作非常适合这种动态的、不确定长度的过程。
以下是一个简单的基于链栈的二进制转十进制的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int value;
struct Node* next;
} StackNode;
// 初始化链栈
StackNode* createStack() {
StackNode* top = (StackNode*)malloc(sizeof(StackNode));
if (!top) {
printf("Memory allocation error!\n");
return NULL;
}
top->value = 0;
top->next = NULL;
return top;
}
// 入栈
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->value = value;
newNode->next = *top;
*top = newNode;
}
// 出栈并返回值
int pop(StackNode** top) {
int value = (*top)->value;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
// 主函数:二进制转十进制
int binaryToDecimal(int binary, int base) {
StackNode* stack = createStack();
while (binary > 0) {
int remainder = binary % base;
push(&stack, remainder);
binary /= base;
}
int decimal = 0;
while (stack != NULL) {
decimal += pop(&stack) * pow(base, stack->value);
}
return decimal;
}
int main() {
int binary = 101010; // 示例二进制数
int base = 2; // 二进制转十进制
printf("Decimal representation: %d\n", binaryToDecimal(binary, base));
return 0;
}
```
阅读全文