# include<stdio.h>
#include<malloc.h>
# define stackincrement 10
# define stack_size 100
typedef int ElemType;
typedef int status;
typedef int SelemType;
# define OK 1
# define OVERFLOW -1
# define ERROR -1
typedef struct
{
int *base;
int *top;
int stacksize;
} SqStack;
status InitStack(SqStack *S){
S->base = (SelemType *)malloc(stack_size * sizeof(ElemType));
if (!S->base)
{
exit(OVERFLOW);
}
S->top = S->base;
S->stacksize = stack_size;
return OK;
}
status GetTop(SqStack *S,SelemType e){
if(S->top == S->base) return ERROR;
e = (*S->top - 1);
return OK;
}
status Push(SqStack *S,SelemType e){
if ((S->top - S->base ) >= S->stacksize)
{
S->base = (ElemType*)realloc(S->base,(S->stacksize + stackincrement) * sizeof(ElemType));
if (!S->base) exit(OVERFLOW);
S->top = S->base + S->stacksize;
S->stacksize += stackincrement;
}
*S->top++ = e;
return OK;
}
status StackEmpty(SqStack *S){
if (S->base == S->top)
{
return 1;
}else{
return 0;
}
}
status Pop(SqStack *S,SelemType *e){
if (S->top == S->base)
{
return ERROR;
}
S->top = S->top - 1;
*e = *S->top;
return OK;
}
void conversion(SqStack *S,int num){
int a;
while(num){
a = num % 2;
Push(S,a);
num /= 2;
}
printf("转换的八进制数:");
while(!StackEmpty(S)){
SelemType e;
Pop(S,&e);
printf("%d", e);
}
}
main (){
SqStack stack;
InitStack(&stack);
int num;
printf("请输入一个十进制数:");
scanf("%d",&num);
conversion(&stack,num);
}
实现结果: