数据结构 进制转换(十进制转换为d(2、8、16)进制)C语言

#include<stdlib.h>
#include<stdio.h>
#include<stddef.h>
#define MAXSIZE 50

typedef char ElemType;
/*定义栈结构*/
typedef struct 
{ ElemType data[MAXSIZE];
  int top;
}SeqStack,*PSeqStack;

/*初始化栈,构造一个空栈,如果成功,则返回栈的地址*/
PSeqStack Init_SeqStack()
{ PSeqStack s;
  s=(PSeqStack)malloc(sizeof(SeqStack));
  if(s) 
   s->top=-1;
  return s;	
}

/* 判断栈是否为空,如果为空,则返回1,否则返回0*/
int Empty_SeqStack(PSeqStack s)
{if(s->top==-1)
     return 1;
 else
     return 0;
}

/*入栈操作,栈不满时,入栈一个元素,成功返回1,失败返回0*/
int Push_SeqStack(PSeqStack s,ElemType x)
{
if(s->top==MAXSIZE-1 )
      return 0;
else
      {s->top=s->top+1;
       s->data[s->top]=x;
       return 1;
       }
}

/*出栈操作,栈不空时,出栈一个元素,用参数*x保存,成功返回1,失败返回0*/
int Pop_SeqStack(PSeqStack s,ElemType *x)
{
if(Empty_SeqStack(s))
   return 0;
else
  { *x=s->data[s->top];
    s->top=s->top-1;
    return 1;
  }
}

/*取栈顶元素操作,栈不空时,获取栈顶元素,成功返回1,失败返回0*/
int GetTop_SeqStack(PSeqStack s,ElemType *x)
{
 if(Empty_SeqStack(s))
   return 0;
else
   *x=s->data[s->top];
    return 1;
}
/*销毁栈*/
void Destroy_SeqStack(PSeqStack *s)
{
if(*s)
 free(*s);
*s=NULL;
return;     
}

/*十进制转换成r进制(2,8,16)*/
void Conversion(int num,int r)
{ PSeqStack s;
  ElemType x;
  if(!r)
    {
    printf("基数不能为0");
    return;
    }
  s=Init_SeqStack();
  if(!s)
    {
    printf("初始化栈空间失败");   
    return; 
    }
 while(num)
  {if(num%r>9)
     Push_SeqStack(s,num%r+'A'-10);   /*余数大于9,则进栈ABCDEF*/
   else
     Push_SeqStack(s,num%r+'0');   /*余数小于10,则进栈数字字符*/
   num=num/r;
  }
 while(!Empty_SeqStack(s))
 {Pop_SeqStack(s,&x);
  printf("%c",x);
 }
}
int main()
{ int r, num;
printf("请输入要转换的数据");
 scanf("%d",&num);
printf("请输入要转换成几进制:");
scanf("%d",&r);
Conversion(num,r);
//getch();   //非程序一部分,Dev-C++环境要求 
}

资源源自:顺序栈实现将十进制整数转换为r(2、8、16)进制数_zyj_hollowword的博客-CSDN博客_顺序栈实现十进制转换任意进制 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值