顺序栈实现进制转换

1.定义一个顺序栈的结构体。

typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;

2.写一个建立空顺序栈的函数

Status Init_Stack(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;
    return OK;
}

3.写一个输出顺序栈元素的函数

Status Exit_Stack(SqStack S){
    if(S.top==S.base)return ERROR; 
    while(S.base!=S.top){
        printf("%d ",*(S.base));
        S.base++;
    }
    printf("\n");
} 

4.这里进制转换的方法就是,先把k进制的元素转化为10进制,在由10进制转化为i进制输出出来。这里采用栈,把余数依次压栈,最后顺序弹出就可以得到i进制的值。

void conversion(int k,int i) {
    SqStack L;
    Init_Stack(L);
    printf("请输入想转化的数:");
    int a; 
    scanf("%d",&a);
    int b;
    int c=1;
    int j=0;
    while(a){//k进制转化为10进制
        b=a%10*c;
        a=a/10;
        j+=b;
        c=c*2;
    }
    printf("转化为十进制为:%d\n",j);
    while(j){
        Push_Stack(L,j%i);
        j=j/i;
    }
    int e;
    printf("转化为%d进制的数为:",i);
    while(!(Empty_Stack(L))){//十进制转化为i进制
        Pop_Stack(L,e);
        if(e<10)
        {
            printf("%d",e);
        }
        else
            printf("%c",'A'+e-10);
    }
}
posted @ 2020-10-23 10:34  ....陈陈陈陈  阅读(1024)  评论(0)    收藏  举报