如何用C语言中的顺序栈(数组)和链栈数据结构分别实现不同进制之间的转换,C语言代码
时间: 2024-10-22 08:30:07 浏览: 34
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
在C语言中,我们可以使用顺序栈(数组)和链栈(链表)数据结构来存储数字,然后进行不同进制间的转换。这里我会简单地给出如何用这两种方式实现十进制转二进制的例子。
**顺序栈(数组)实现:**
```c
#include <stdio.h>
#include <string.h>
// 顺序栈,用于存放每一位的值
#define MAX_DIGITS 8 // 二进制最多8位
void decimal_to_binary(int num, int* stack) {
while (num > 0) {
stack[--MAX_DIGITS] = num % 2; // 取余存入栈顶
num /= 2;
}
}
// 转换后从栈中弹出并打印二进制数
void print_binary(int* stack) {
for (int i = MAX_DIGITS - 1; i >= 0; --i) {
printf("%d", stack[i]);
}
}
int main() {
int decimal = 42;
int binary_stack[MAX_DIGITS];
decimal_to_binary(decimal, binary_stack);
printf("Decimal %d in binary is ", decimal);
print_binary(binary_stack);
return 0;
}
```
**链栈(链表)实现:**
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
typedef struct Node {
int value;
struct Node* next;
} StackNode;
StackNode* create_node(int val) {
StackNode* node = (StackNode*) malloc(sizeof(StackNode));
node->value = val;
node->next = NULL;
return node;
}
// 链栈实现同样的转换
void decimal_to_binary(int num, StackNode** top) {
StackNode* current = *top;
while (num > 0) {
*top = create_node(num % 2); // 存入新节点到栈顶
num /= 2;
current = *top; // 更新current指向栈顶
}
}
// 打印链栈里的二进制数
void print_binary(StackNode* top) {
while (top != NULL) {
printf("%d", top->value);
top = top->next;
}
}
int main() {
int decimal = 42;
StackNode* binary_top = NULL;
decimal_to_binary(decimal, &binary_top);
printf("Decimal %d in binary is ", decimal);
print_binary(binary_top);
free(binary_top); // 别忘了释放内存
return 0;
}
```
阅读全文