C语言编写一个程序,利用栈的特点和基本操作,实现如下功能:将一个100以内的正整数N转换为二进制数,并输出转换后的结果。(注:即可采用顺序栈,也可采用链式栈)
时间: 2024-10-23 11:21:19 浏览: 22
给定一个十进制正整数N,程序输出从1到N的所有整数中,“1”出现的个数。DMU
5星 · 资源好评率100%
在C语言中,我们可以使用链式栈来实现这个功能,因为链表栈的操作更适合动态内存分配。以下是一个简单的链式栈的二进制转换程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* next;
} StackNode;
// 创建一个新的栈节点
StackNode* createNode(int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->value = value;
newNode->next = NULL;
return newNode;
}
// 初始化空栈
StackNode* initStack() {
StackNode* top = NULL;
return top;
}
// 将元素压入栈
void push(StackNode** top, int value) {
StackNode* newNode = createNode(value);
if (*top == NULL) {
*top = newNode;
} else {
newNode->next = *top;
*top = newNode;
}
}
// 弹出栈顶元素并返回其值
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者抛出异常处理
}
int value = (*top)->value;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
// 主函数,将十进制转二进制
void decimalToBinary(int n, StackNode** top) {
while (n > 0) {
push(top, n % 2); // 压入剩余位
n /= 2;
}
}
// 打印栈顶元素
void printStack(StackNode* top) {
while (top != NULL) {
printf("%d", top->value);
top = top->next;
}
printf("\n");
}
int main() {
StackNode* stackTop = initStack();
int num;
printf("Enter a number between 0 and 99: ");
scanf("%d", &num);
decimalToBinary(num, &stackTop);
printf("The binary representation of the number is: ");
printStack(stackTop);
return 0;
}
```
当你运行这个程序时,它会提示你输入一个100以内的正整数,然后输出它的二进制表示。注意,在实际应用中,为了更好的可读性和错误处理,你可以添加一些边界检查以及在主循环结束前打印栈为空的提示。
阅读全文