利用栈实现十转八进制
时间: 2023-10-26 15:14:04 浏览: 64
好的,下面是利用栈实现十进制转八进制的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 10
#define STACK_INCREMENT 5
// 定义一个栈结构体
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stackSize; // 栈的容量
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->base = (int*)malloc(sizeof(int) * STACK_INIT_SIZE);
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
// 入栈操作
void push(Stack *s, int data) {
// 如果栈已满,需要重新分配内存
if (s->top - s->base >= s->stackSize) {
s->base = (int*)realloc(s->base, (s->stackSize + STACK_INCREMENT) * sizeof(int));
if (!s->base) {
printf("内存分配失败!");
exit(1);
}
s->top = s->base + s->stackSize;
s->stackSize += STACK_INCREMENT;
}
*(s->top)++ = data;
}
// 出栈操作
int pop(Stack *s) {
// 如果栈为空,返回-1
if (s->top == s->base) {
return -1;
}
return *--(s->top);
}
int main() {
int num, remainder;
Stack s;
initStack(&s);
printf("请输入一个十进制整数:");
scanf("%d", &num);
// 将十进制数转换为八进制
while (num > 0) {
remainder = num % 8;
push(&s, remainder);
num /= 8;
}
// 输出转换后的结果
printf("转换后的八进制数为:");
while (s.top != s.base) {
printf("%d", pop(&s));
}
printf("\n");
return 0;
}
```
该代码利用栈实现了将一个十进制数转换为八进制的功能。程序将十进制数不断除以8,将余数压入栈中,然后再依次弹出栈中的元素,即可得到转换后的八进制数。