c语言中栈和队列写编写主函数来调用上述函数体,设计并实现算法:十进制转换为二进制
时间: 2024-10-25 11:06:41 浏览: 25
在C语言中,我们可以使用数组模拟栈和队列来完成十进制转二进制的过程。这里我们将创建一个简单的主函数,利用栈来存储每一位二进制数,然后逐步处理十进制数字。
首先,我们来编写一个用于获取输入的函数,接着是一个栈结构体和相关的操作函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX stack_size
typedef struct {
int data[MAX];
int top;
} Stack;
// 初始化栈
void init(Stack* s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s->top == -1;
}
// 入栈操作
void push(Stack* s, int num) {
if (s->top < MAX - 1) {
s->data[++s->top] = num;
} else {
printf("Stack overflow!\n");
}
}
// 出栈操作
int pop(Stack* s) {
if (!isEmpty(s)) {
return s->data[s->top--];
} else {
printf("Stack underflow!\n");
return -1; // 返回错误值
}
}
// 十进制转二进制
void decimalToBinary(int n) {
Stack binaryStack;
while (n > 0) {
push(&binaryStack, n % 2);
n /= 2;
}
while (!isEmpty(&binaryStack)) {
int digit = pop(&binaryStack);
printf("%d", digit);
}
}
// 主函数
int main() {
int decimalNum;
printf("Enter a non-negative integer: ");
scanf("%d", &decimalNum);
if (decimalNum >= 0) {
printf("Binary representation is: ");
decimalToBinary(decimalNum);
} else {
printf("Invalid input. Please enter a non-negative integer.\n");
}
return 0;
}
```
在这个程序中,我们首先读取用户输入的十进制整数,然后通过循环不断将除以2的余数入栈,直到n变为0。最后,出栈并打印栈中的元素,即得到二进制表示。
阅读全文