c语言 】将一个十进制的正整数 X 转换成 r(r=2~9)进制数,并输出转换后的值。 要求采用链栈实现
时间: 2024-02-24 18:58:21 浏览: 63
好的,以下是将一个十进制的正整数 X 转换成 r(r=2~9)进制数,并输出转换后的值的 C 代码,采用链栈实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct {
Node *top;
} Stack;
// 初始化栈
void InitStack(Stack *s) {
s->top = NULL;
}
// 判断栈是否为空
int IsEmpty(Stack *s) {
return s->top == NULL;
}
// 入栈
void Push(Stack *s, int data) {
Node *node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = s->top;
s->top = node;
}
// 出栈
int Pop(Stack *s) {
if (IsEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
int data = s->top->data;
Node *temp = s->top;
s->top = s->top->next;
free(temp);
return data;
}
// 进制转换
void Convert(int x, int r) {
Stack s;
InitStack(&s);
while (x != 0) {
int remainder = x % r;
Push(&s, remainder);
x /= r;
}
printf("%d进制数:", r);
while (!IsEmpty(&s)) {
printf("%d", Pop(&s));
}
printf("\n");
}
int main() {
int x = 123;
int r = 8;
Convert(x, r);
return 0;
}
```
在这个示例代码中,我们定义了一个链栈的结构体 `Stack`,其中包括栈顶指针 `top`。我们使用了三个基本的栈操作,分别是初始化栈、判断栈是否为空、入栈和出栈。在进行进制转换的时候,我们首先初始化一个栈,然后不断将 X 除以 r,将余数压入栈中,直到 X 为 0。最后,我们依次从栈中弹出元素,得到的就是 X 的 r 进制数了。
阅读全文