C语言通过栈实现将十进制转为八进制输出

# 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);
}

实现结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zzldm/article/details/68488714