编写一个c语言程序,运用动态结构-栈,用除2取余法将10进制整数转换为2进制的数,在程序中使用stack实现倒序。且在每一条代码的后面用“//”标明该条代码的作用,或者起到什么效果
时间: 2024-02-12 13:04:02 浏览: 48
利用栈来实现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(&S)` 初始化栈,为栈申请初始空间;
- `Push(&S, n % 2)` 将除以 2 取余的结果入栈;
- `Pop(&S, &e)` 将元素出栈,并将出栈的元素值存储到 `e` 变量中。
在 `main` 函数中,`while (n)` 循环将输入的十进制整数转换为二进制数并入栈,`while (Pop(&S, &e))` 循环依次出栈并输出元素值,最后输出换行符 `"\n"`。
阅读全文