利用栈将十进制数N转换为二进制数输出,转换方法利用辗转除以2取余数法,初始化栈顶为-1,写出定义顺序栈、初始化栈、入栈、出栈、判断空栈、应用测试。c语言写出完整代码
时间: 2024-10-17 20:15:08 浏览: 42
在C语言中,我们可以创建一个简单的顺序栈结构,并利用它来进行十进制转二进制的过程。这里是一个完整的代码示例:
```c
#include <stdio.h>
#include <stdlib.h> // 包含stack相关的函数
// 定义顺序栈结构体
typedef struct {
int* array; // 栈元素数组
int top; // 栈顶指针
int size; // 栈容量
} Stack;
// 初始化栈
Stack* create_stack(int capacity) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->array = (int*)malloc(capacity * sizeof(int));
stack->top = -1;
stack->size = capacity;
return stack;
}
// 入栈操作
void push(Stack* stack, int value) {
if (stack->top == stack->size - 1) { // 检查是否已满
printf("Stack is full.\n");
return;
}
stack->array[++stack->top] = value;
}
// 出栈操作
int pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示栈为空
}
return stack->array[stack->top--];
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == -1;
}
// 将十进制转为二进制并打印
void decimal_to_binary(int n, Stack* stack) {
while (n > 0) {
push(stack, n % 2); // 取余数并入栈
n /= 2; // 更新n为商
}
}
// 应用测试
int main() {
int decimal = 42;
Stack* binary_stack = create_stack(8); // 创建一个足够大的栈
decimal_to_binary(decimal, binary_stack);
while (!isEmpty(binary_stack)) {
printf("%d", pop(binary_stack)); // 依次出栈打印二进制位
printf("\n");
}
free(binary_stack->array); // 释放内存
free(binary_stack);
return 0;
}
```
在这个代码中,我们首先创建了一个顺序栈,然后通过`decimal_to_binary`函数将十进制数`n`逐步转换为二进制,最后通过出栈操作打印出来。注意,在实际运行时需要检查栈是否已满或为空。
阅读全文