栈的应用——数制转换

将一个非负十进制数N,转换为基为B进制数的问题,一般采取“除B取余”来解决

由于最先得到的余数是转化结果的最低位而最后得到的转化结果是最高位,因此很容易联想到用栈来解决

下面给出算法:

typedef int DataType;
void MultiBaseOutput(int N,int B)
{//假设N是非负的十进制数,输出等值的B进制数
	int i;
	SeqStack S;
	InitStack(&S);
	while(N)
	{
		push(&S,N%B);
		N = N/B;
	}
	while(!StackEmpty(&S))//栈非空时退栈输出
	{
		i = Pop(&S);
		printf("%d",i);
	}

}

 

下面给出完整一例:十进制数13转换成2进制的结果

#include <stdio.h>
#include <stdlib.h>
#define StackSize 20   //假定预先分配20个元素
typedef int DataType;//假定栈元素的数据类型为字符
typedef struct
{
    DataType data[StackSize];
    int top;
}SeqStack;

//栈置空
void InitStack(SeqStack *S)
{
    //将顺序栈置空
    S->top = -1;
}
//判断栈是否为空
int StackEmpty(SeqStack *S)
{
    return S->top== -1;
}
//判断栈是否已满
int StackFull(SeqStack *S)
{
    return S->top==StackSize-1;
}
//进栈
void Push(SeqStack *S,int x)
{
    if(StackFull(S))
    {
          printf("Stack overflow");//栈满,退出运行
          exit(0);
    }

    S->data[++S->top] = x;//栈顶指针加1后将x入栈
}
//出栈
DataType Pop(SeqStack *S)
{
    if(StackEmpty(S))
    {
         printf("Stack underflow");//下溢,退出运行
         exit(0);
    }

    return S->data[S->top--];//栈顶元素返回后将栈顶指针减1
}
//进制转换函数
void MultiBaseOutput(int N,int B)
{//假设N是非负的十进制数,输出等值的B进制数
	int i;
	SeqStack S;
	InitStack(&S);
	while(N)
	{
		Push(&S,N%B);
		N = N/B;
	}
	while(!StackEmpty(&S))//栈非空时退栈输出
	{
		i = Pop(&S);
		printf("%d",i);
	}

}

int main()
{
    MultiBaseOutput(13,2);
    return 0;
}


运行截图



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值