#include <stdio.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACK_INCRASE_SIZE 20
enum State{ERR,OK,FAILED};
typedef int SElemType;
typedef struct tag_Stack //此空递增
{
SElemType* pbase; //栈底指针
SElemType* ptop; //栈顶指针
int stacksize; //当前所有可用栈空间(包含已使用的)
}SqStack;
void InitStack(SqStack* ps)
{
ps->pbase = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); //分配失败处理略
ps->ptop = ps->pbase;
ps->stacksize = STACK_INIT_SIZE;
}
void push(SqStack* ps,SElemType* pdata)
{
if(ps->ptop - ps->pbase >= ps->stacksize) //判断是否栈溢出(允许范围)
{
ps->pbase = (SElemType*)realloc(ps->pbase,(ps->stacksize+STACK_INCRASE_SIZE)*sizeof(SElemType));
//分配失败处理略
ps->ptop = ps->stacksize + ps->pbase;
ps->stacksize += STACK_INCRASE_SIZE;
}
*ps->ptop++ = *pdata;
}
enum State pop(SqStack* ps,SElemType* pdata) //出栈pdata
{
if(ps->ptop == ps->pbase) return ERR;
*pdata = *(ps->ptop-1);
ps->ptop--;
return OK;
}
int IsStackEmpty(SqStack* ps)
{
if(ps->ptop == ps->pbase) return 1;
return 0;
}
void main()
{
SqStack Myps; //定义栈管理对象
int num = 0,Ndiv8 = 0; //待转化十进数
SElemType Nmo8 = 0,popout = 0;
InitStack(&Myps);
while(1)
{
printf("请输入一个待转化为8进制的整数:");
scanf("%d",&num);
fflush(stdin);
Ndiv8 = num;
do
{
Nmo8 = Ndiv8 % 8;
push(&Myps,&Nmo8);
Ndiv8 /= 8;
} while(Ndiv8);
//显示
while(!IsStackEmpty(&Myps))
{
pop(&Myps,&popout);
printf("%d",popout);
}
printf("\n");
}
return;
}