利用栈将十进制数N转换为二进制数输出,转换方法利用辗转除以2取余数法,用链栈方法,写出定义顺序栈、初始化栈、入栈、出栈、判断空栈、应用测试。c语言写出完整代码
时间: 2024-10-18 11:18:23 浏览: 8
在C语言中,我们可以创建一个简单的链式栈结构来实现这个任务。首先,我们需要定义栈节点结构,然后实现栈的基本操作。以下是完整的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化栈
StackNode* initStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->next = NULL;
return stack;
}
// 入栈
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = (*top)->next;
(*top)->next = newNode;
}
// 出栈
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回一个错误值表示栈为空
}
StackNode* temp = *top;
int value = temp->data;
*top = temp->next;
free(temp);
return value;
}
// 判断栈是否为空
int isEmpty(StackNode* top) {
return top == NULL;
}
// 将十进制数转换为二进制并打印
void decimalToBinary(int n) {
StackNode* stack = initStack();
while (n > 0) {
push(&stack, n % 2); // 取余数入栈
n /= 2; // 商进位
}
printf("Binary representation: ");
while (!isEmpty(stack)) {
int binaryDigit = pop(&stack);
printf("%d", binaryDigit);
}
printf("\n");
}
// 应用测试
int main() {
int decimalNum = 42;
printf("Converting decimal number %d to binary:\n", decimalNum);
decimalToBinary(decimalNum);
return 0;
}
```
在这个代码中,`decimalToBinary`函数负责将十进制数转换为二进制,并通过栈的入栈和出栈操作完成。在主函数`main`中我们对这个功能进行了简单测试。
阅读全文