C语言 数据结构和ACM2023-第三章-十进制转八进制 - LJD 【问题描述】 写一个算法,将一个非负十进制数转为一个等价的八进制数 要求使用堆栈,且堆栈的基本操作使用链栈实现 【输入形式】 输入一个非负十进制整数 【输出形式】 输出对应八进制数 【样例输入】 10 【样例输出】 12
时间: 2023-12-01 20:04:57 浏览: 86
用C++实现排序-ACM竞赛常用算法与数据结构
以下是C语言实现将一个非负十进制数转为一个等价的八进制数的代码,使用链栈实现堆栈:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间(以元素为单位)
} Stack;
// 初始化栈
void InitStack(Stack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if (!S->base) {
exit(0); // 分配内存失败,退出程序
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
}
// 入栈
void Push(Stack *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(0); // 分配内存失败,退出程序
}
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top) = e;
S->top++;
}
// 出栈
int Pop(Stack *S) {
if (S->top == S->base) {
exit(0); // 栈为空,退出程序
}
S->top--;
return *(S->top);
}
int main() {
int n;
scanf("%d", &n);
Stack S;
InitStack(&S);
if (n == 0) {
Push(&S, 0);
}
while (n != 0) {
Push(&S, n % 8);
n /= 8;
}
while (S.top != S.base) {
printf("%d", Pop(&S));
}
printf("\n");
return 0;
}
```
输入格式为:一个非负十进制整数。输出格式为:对应的八进制数。
阅读全文