利用栈将十进制数N转换为二进制数输出,转换方法利用辗转除以2取余数法,顺序栈初始化栈顶为数组大小,写出定义顺序栈、初始化栈、入栈、出栈、判断空栈、应用测试。c语言写出完整代码
时间: 2024-10-17 09:15:08 浏览: 18
在C语言中,我们可以创建一个简单的顺序栈结构(基于数组实现),并用它来进行十进制转二进制的过程。以下是完整的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序栈结构
typedef struct Stack {
int* data; // 数组存储栈元素
int top; // 栈顶指针
int size; // 栈的最大容量
} Stack;
// 初始化栈
void init(Stack* stack, int size) {
stack->data = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->size = size;
}
// 入栈操作
void push(Stack* stack, int value) {
if (stack->top == stack->size - 1) {
printf("Stack overflow!\n");
return;
}
stack->data[++stack->top] = value;
}
// 出栈操作
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack underflow!\n");
return -1;
}
return stack->data[stack->top--];
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == -1;
}
// 转换函数
void decimalToBinary(int n, Stack* stack) {
while (n > 0) {
push(stack, n % 2);
n /= 2;
}
}
// 应用测试
int main() {
Stack binaryStack;
int decimalNum = 42;
init(&binaryStack, 10); // 预估最大二进制位数为10(42的二进制最多10位)
decimalToBinary(decimalNum, &binaryStack);
while (!isEmpty(&binaryStack)) {
printf("%d", pop(&binaryStack));
}
free(binaryStack.data);
return 0;
}
```
在这个例子中,我们首先定义了一个顺序栈,然后通过`init()`函数为其分配内存。接着,`decimalToBinary()`函数把输入的十进制数转换成二进制,并依次压入栈中。最后,在`main()`中,我们取出栈里的元素,按照从下到上(栈内是从底到顶)的方式显示出来,得到的就是二进制表示。
阅读全文