设计算法,使用链栈的相关操作,实现十进制转换二进制 C语言
时间: 2024-10-25 19:06:32 浏览: 37
lianzhan.rar_使用栈求
在C语言中,我们可以使用链表来实现一个递归的算法来将十进制数转换为二进制。链栈在这里不是必需的,因为常规的数组就可以完成这个任务,但是为了展示链栈的概念,这里我们使用链式结构来存储中间结果。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* next;
} Node;
// 创建一个新的节点
Node* createNode(int val) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = val;
newNode->next = NULL;
return newNode;
}
// 向链表末尾添加元素
void push(Node** top, int val) {
Node* newNode = createNode(val);
if (*top == NULL) {
*top = newNode;
} else {
newNode->next = *top;
*top = newNode;
}
}
// 从链表顶部移除并返回值
int pop(Node** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1;
}
int val = (*top)->value;
Node* temp = *top;
*top = (*top)->next;
free(temp);
return val;
}
// 十进制转二进制
void decimalToBinary(int num, Node** top) {
if (num > 0) {
decimalToBinary(num / 2, top); // 递归调用
push(top, num % 2); // 将余数压入栈
}
}
// 打印链表表示的二进制数
void printBinary(Node* top) {
while (top != NULL) {
printf("%d", top->value);
top = top->next;
}
printf("\n");
}
int main() {
int decimal = 42; // 需要转换的十进制数
Node* stackTop = NULL;
// 转换并打印二进制
decimalToBinary(decimal, &stackTop);
printf("Decimal %d in binary is ", decimal);
printBinary(stackTop);
return 0;
}
```
在这个程序中,`decimalToBinary`函数通过递归将十进制数转换为二进制,每一步都将余数压入链表。最后,`printBinary`函数遍历链表,显示完整的二进制表示。
阅读全文