数据结构:数制转换

十进制数 N 和其他 d 进制数 转换原理:
N= (N div d ) x d + N mod d(div为整除运算 mod为求余运算)

对于输入的任意的一个非负十进制整数,打印输出与其值的八进制数。由于上诉计算过程是从低到高位顺序产生八进制的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数。

#include<stdio.h>
#include<stdlib.h>


    typedef struct Node{
        int Data;
        struct Node *Next;
    } LinkStack ;   

    LinkStack *CreateStack(){
        LinkStack *S;
        S = (LinkStack *)malloc(sizeof(LinkStack));
        S->Next = NULL;
        return S;
    }

    int isEmpty(LinkStack *S){
        return (S->Next == NULL) ;  //若为空 返回1
    }

    LinkStack *Push(LinkStack *S,int item){
        LinkStack *TempCell;
        TempCell = (LinkStack *)malloc(sizeof(LinkStack));
        TempCell->Data = item;
        TempCell->Next = S->Next;
        S->Next = TempCell;
        //  free(TempCell);
        /* 
        一开始在这里出错了 这里的不能把调用free(TempCell)
        */

    }

    int Pop(LinkStack *S){
        LinkStack *FirstCell;
        int TopElem;
        if(isEmpty(S)){
            printf("堆栈空\n");
            return 0 ;
        }else{
            FirstCell  = S->Next;
            S->Next = FirstCell->Next;
            TopElem = FirstCell->Data;
           free(FirstCell);
            return TopElem;
        }
    }

    void conversion(){
        LinkStack *s;
        int n;
        int item;

         s = CreateStack();

        scanf("%d",&n);

        while(n){
            Push(s,n%8);
            n = n/8;
        }
        while(!isEmpty(s)){
            int item;
            item = Pop(s);
            printf("%d", item);
        }
        printf("\n");

}

    int main(){

            conversion();

        return 0;
    }
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值