用c语言来写,用链栈结构实现 使用辗转相除法十进制转二进制
时间: 2024-05-08 07:18:35 浏览: 5
好的,我可以为您解答这个问题。为了把一个十进制数转换成二进制数,您可以使用链栈结构来实现辗转相除法。下面是C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间(以sizeof(int)为单位)
} SqStack;
// 初始化一个栈
void InitStack(SqStack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if (!S->base) {
exit(1); // 存储分配失败
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
}
// 压栈
void Push(SqStack *S, int e) {
// 栈满,追加存储空间
if (S->top - S->base >= S->stacksize) {
S->base = (int *)realloc(S->base,
(S->stacksize + STACKINCREMENT) * sizeof(int));
if (!S->base) {
exit(1); // 存储分配失败
}
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top) = e; // 入栈
S->top++;
}
// 出栈
int Pop(SqStack *S) {
if (S->top == S->base) {
exit(1); // 栈空
}
S->top--;
return *(S->top); // 出栈
}
// 判断栈是否为空
int StackEmpty(SqStack S) {
return S.top == S.base;
}
// 十进制转二进制
void DecimalToBinary(int n) {
SqStack S;
InitStack(&S); // 初始化栈
while (n) {
Push(&S, n % 2); // 入栈余数
n /= 2;
}
while (!StackEmpty(S)) {
printf("%d", Pop(&S)); // 出栈并输出
}
}
int main() {
int n;
printf("请输入一个十进制整数:");
scanf("%d", &n);
printf("二进制数为:");
DecimalToBinary(n);
return 0;
}
```
这段代码使用了链栈结构来实现了十进制转二进制的功能。首先,初始化一个栈。然后,用辗转相除法将十进制数转换为二进制数,并入栈每个余数。最后,出栈并输出每个二进制位,即可得到十进制数的二进制形式。