#include<stdio.h>
#include<stdlib.h>
#define INIT_STACK_SIZE 10
#define STACKINCREMENT 10
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack InitStack(SqStack S);
SqStack Push(SqStack S,int e);
SqStack Pop(SqStack S,int *e);
int main(void)
{
int value,e;
SqStack S;
printf("Please input decimal number: ");
scanf("%d",&value);
S=InitStack(S);
while(value)
{
S=Push(S,value%8);
value/=8;
}
while(S.top != S.base)
{
S=Pop(S,&e); //注意此处判断栈是否为空
printf("%d",e);
}
printf("\n");
free(S.base);
return 0;
}
SqStack InitStack(SqStack S)
{
if((S.base=(int *)malloc(INIT_STACK_SIZE * sizeof(int)))==NULL)
{
exit(1);
}
S.top=S.base;
S.stacksize=INIT_STACK_SIZE;
return S;
}
SqStack Push(SqStack S,int e)
{
*(S.top++)=e;
if(S.top-S.base >= S.stacksize)
{
if((S.base=(int *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(int)))==NULL)
{
exit(1);
}
S.top=S.base+S.stacksize;
}
return S;
}
SqStack Pop(SqStack S,int *e)
{
if(S.top != S.base)
*e=*(--S.top);
return S;
}