数据结构试验之栈一:进制转换

以上为题目:

以下为代码:

#include <stdio.h>
#include <stdlib.h>
#define Stack_init_size 1000
#define Stackincrement 100

typedef int Selement;
typedef struct
{
    Selement *top;
    Selement *base;
    int Stacksize;
}Sqstack;

int Initstack(Sqstack *S)//万年不变的初始化
{
    S->base=(Selement *)malloc(Stack_init_size*sizeof(Selement));
    if(!S->base)return -1;
    S->top=S->base;
    S->Stacksize=Stack_init_size;
    return 1;
}

int Push(Sqstack *S,int e)//入栈函数,学过栈的都知道
{
    if(S->top-S->base>=S->Stacksize)//栈满,追加储存空间
    {
        S->base=(Selement *)realloc(S->base,(S->Stacksize+Stackincrement)*sizeof(Selement));
        if(!S->base)return -1;
        S->top=S->base+S->Stacksize;
        S->Stacksize+=Stackincrement;
    }
    *S->top++=e;
    return 0;
}
int Pop(Sqstack *S,int e)//出栈函数,我写的不大一样
{//主要是因为编译器
    if(S->top == S->base)
        exit(-1);
    else
    {
        e=*--S->top;
        return e;
    }

}

int Stackempty(Sqstack *S)//判断栈是否为空
{
    if(S->base==S->top)return 1;
    else return 0;
}

void Change(Sqstack *S,int n,int r)
{//转换进制
    int e;
    while(n)//此处核心算法
    {
        Push(S,n%r);
        n=n/r;
    }
    while(!Stackempty(S))
    {//当栈不为空的时候输出

       printf("%d",Pop(S,e));
    }
}


int main()
{
    int n;
    int r;
    Sqstack S;
    scanf("%d",&n);
    scanf("%d",&r);
    Initstack(&S);
    Change(&S,n,r);

    return 0;
}
此代码在codeblocks环境中运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值