#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct {
SElemType* base;
SElemType* top;
int stacksize;
} SqStack;
Status InitStack(SqStack* S) {
S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S->base) {
return OVERFLOW;
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
printf("栈初始化成功!\n");
return OK;
}
Status Push(SqStack* S, SElemType e) {
if (S->top - S->base >= S->stacksize) {
S->base = (SElemType*)realloc(S->base, (S->stacksize + STACK_INCREMENT) * sizeof(SElemType));
if (!S->base) {
return OVERFLOW;
}
S->top = S->base + S->stacksize;
S->stacksize += STACK_INCREMENT;
}
*S->top++ = e;
return OK;
}
Status Pop(SqStack* S, SElemType* e) {
if (S->top == S->base) {
return ERROR;
}
*e = *--S->top;
return OK;
}
Status StackEmpty(SqStack S) {
if (S.top == S.base) {
return TRUE;
}
return FALSE;
}
int main() {
SqStack S;
int N, e;
InitStack(&S);
printf("请输入一个十进制数:");
scanf_s("%d", &N);
while (N) {
Push(&S, N % 8);
N = N / 8;
}
printf("转换为八进制数为:");
while (!StackEmpty(S)) {
Pop(&S, &e);
printf("%d", e);
}
printf("\n");
return 0;
}
基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数;