代码如下
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR 0
#define OVERFLOW -2
#include
#include
#include
typedef int SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int StackSize;
}SqStack;
void InitStack(SqStack s)
{
s->base = (SElemType)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!s->base) exit(OVERFLOW);
s->top = s->base;
s->StackSize = STACK_INIT_SIZE;
}
void push(SqStack s, SElemType e)
{
if (s->top - s->base >= s->StackSize) {
s->base = (SElemType *)realloc(s->base, (s->StackSize + STACKINCREMENT) * sizeof(SElemType));
if (!s->base) exit(OVERFLOW);
s->top = s->base + s->StackSize;
s->StackSize += STACKINCREMENT;
}
*s->top++ = e;
}
int PoP(SqStack *s, SElemType *e)
{
if (s->top == s->base) return ERROR;*//这个地方是否有问题**
s->top = s->top - 1;
*e = *s->top;
}
int StackEmpty(SqStack s)
{
if (s.top == s.base)
{
return 1;
}
else
{
return 0;
}
}
void Conversion(int N)
{
SElemType e;
SqStack s;
InitStack(&s);
while (N) {
push(&s, N % 8);
}
printf("转换后的八进制数为:");
while (StackEmpty(s) != 1)
{
PoP(&s, &e);
printf("%d", e);
}
printf("\n");
}
void main()
{
int n;
printf("请输入一个十进制数:");
scanf_s("%d", &n);
Conversion(n);
}