利用顺序栈将一个十进制整数转换成八进制整数,要求输入一个十进制数,输出一个八进制数;数据结构c语言版
时间: 2024-11-16 14:20:29 浏览: 6
C语言-顺序栈实现十进制转换为二进制-八进制-十六进制
利用顺序栈(也称为数组栈)将十进制整数转换成八进制整数的过程涉及到迭代和除法操作。以下是使用C语言实现的一个简化版本:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义栈结构
typedef struct {
int stack[100]; // 可能需要调整栈大小,这取决于最大的数字
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 入栈元素
void push(Stack *s, int num) {
if (s->top < sizeof(s->stack) - 1) {
s->top++;
s->stack[s->top] = num;
} else {
printf("Stack overflow!\n");
}
}
// 出栈并返回栈顶元素
int pop(Stack *s) {
if (s->top >= 0) {
return s->stack[s->top--];
} else {
printf("Stack underflow!\n");
return -1; // 返回特殊值表示空栈
}
}
// 十进制转八进制
void decimal_to_octal(int decimal, Stack *octal_stack) {
while (decimal > 0) {
int remainder = decimal % 8;
push(octal_stack, remainder);
decimal /= 8;
}
}
// 将栈的内容转换为字符串并打印出来
void print_octal(Stack *octal_stack) {
char octal[50]; // 预计最多3位八进制数,加上前导零
int i;
for (i = 0; i <= octal_stack->top; ++i) {
sprintf(&octal[i], "%d", pop(octal_stack));
if (i != 0)
octal[i] = octal[i - 1] == '0' ? '\0' : octal[i - 1]; // 检查连续的零,避免打印多余的'0'
}
printf("%s\n", octal);
}
int main() {
int decimal_num;
Stack octal_stack;
init(&octal_stack);
printf("Enter a decimal number: ");
scanf("%d", &decimal_num);
decimal_to_octal(decimal_num, &octal_stack);
print_octal(&octal_stack);
return 0;
}
```
在这个程序中,我们首先初始化栈,然后通过不断取余数的方式将十进制数转换成八进制数,并入栈。最后出栈并将栈里的内容组成一个八进制字符串。
阅读全文