编写一个c语言程序,运用动态结构-栈,用除2取余法将10进制整数转换为2进制的数,在程序中使用stack实现倒序。且在每一步的后面写出该条代码在整个程序中所起到的作用
时间: 2024-02-12 22:04:01 浏览: 71
利用栈来实现10进制到2进制的转换
好的,以下是符合要求的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef struct {
int *base;
int *top;
int stack_size;
} Stack;
void InitStack(Stack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if (!S->base) {
exit(0);
}
S->top = S->base;
S->stack_size = STACK_INIT_SIZE;
}
void Push(Stack *S, int e) {
if (S->top - S->base >= S->stack_size) {
S->base = (int *)realloc(S->base, (S->stack_size + STACK_INCREMENT) * sizeof(int));
if (!S->base) {
exit(0);
}
S->top = S->base + S->stack_size;
S->stack_size += STACK_INCREMENT;
}
*(S->top) = e;
S->top++;
}
int Pop(Stack *S, int *e) {
if (S->top == S->base) {
return 0;
}
S->top--;
*e = *(S->top);
return 1;
}
int main() {
int n, e;
Stack S;
InitStack(&S);
printf("请输入一个十进制整数:");
scanf("%d", &n);
while (n) {
Push(&S, n % 2); // 将除2取余的结果入栈
n /= 2;
}
printf("转换为二进制的结果是:");
while (Pop(&S, &e)) { // 依次出栈,输出结果
printf("%d", e);
}
printf("\n");
return 0;
}
```
在该程序中,`Stack` 是动态结构体,用于表示栈。`InitStack` 函数用于初始化栈,`Push` 函数用于将元素入栈,`Pop` 函数用于将元素出栈。`main` 函数中,首先输入一个十进制整数 `n`,然后将 `n` 除以 2 取余的结果依次入栈,最后依次出栈并输出结果,即可得到转换为二进制的结果。
在程序中,每个栈操作函数都有自己的作用:`InitStack` 初始化栈,`Push` 将元素入栈,`Pop` 将元素出栈。在 `main` 函数中,`Push(&S, n % 2)` 将除以 2 取余的结果入栈,`while (Pop(&S, &e))` 依次出栈并输出结果。
阅读全文