十进制整数转化R进制整数

数据结构的设计

栈结构的逻辑结构为线性的,可建立链式结构使得入栈、出栈的操作是动态的,也可以很好地实现进制的转换。而且进制转换恰好和栈的输入输出输出类似,故选择栈是最好的。

功能函数的设计

建立并初始化栈函数 sqstack *Init_seqstack()

 功能:该函数实现建立初始化的栈。

具体过程:
1.建立一个栈结构体指针s;
2.将s指针指向的s->top赋予-1,即定义栈顶初始为空。

判栈空函数 int note(sqstack *t)

 功能:该函数实现判断栈是否为空,栈为空则返回1,否则返回0。  

判栈满函数 int isfull(sqstack *t)

 功能:该函数实现判断栈是否为空,栈为满则返回1,否则返回0。

入栈函数 int pop1(sqstack *t,int data)

 功能:该函数实现将元素依次入栈放于栈顶位置s->top。
 具体过程:
 1.先判断栈是否满,若栈已满,则不能执行入栈操作,返回0;
 2.若栈不满,则将栈顶指针向上移,将元素入栈到栈顶位置。

出栈函数 int push1(sqstack *t,int *data)

 功能:该函数实现将栈顶位置元素依次出栈。
 具体过程:
 1.先判断栈是否为空,若栈为空,则不能执行出栈操作,返回0;
 2.若栈不为空,则将栈顶指针向下移,将栈顶位置元素出栈。

进制转换函数 int zhuan(sqstack *t)

 功能:该函数实现将输入的十进制正整数转换为r进制数。
 具体过程:
 1.先判断栈是否为空,若栈为空,则不执行进制转换,返回0;
 2.若栈不为空,则根据入栈的栈顶元素的大小,决定出栈的元素。若入栈栈顶元素小	于10,则直接输出;

若入栈栈顶元素为10/11/12/13/14/15,输出a/b/c/d/e/f;

代码

#include<stdio.h>
#define sm 110  //定义sm的值
#include <malloc.h>
#include <process.h>
#include<iostream>
typedef struct mystack//定义结构体
{
	int a[sm];  //声明a[]为整数型组
	int top;  //声明指针类型
 }sqstack;//结构体简称
 
 sqstack *Init_seqstack()  //初始化栈
{
	sqstack *s;  //定义结构体的一个指针s
	s=(sqstack*)malloc(sizeof(sqstack));//动态创建一个sqstack类型的空间给指针s
	s->top=-1;	//定义初始栈值为-1,即为空栈
	return s;  //返回指针s
}

int isfull(sqstack *t)//判满 
 {
 	if (t->top==sm-1) //定义栈满的条件
	 {
 		return 1; //栈满返回1
	 }
 	return 0;	//否则返回0
 	
 }
 
int note(sqstack *t)//判空 
 {
 	if(t->top==-1)//定义栈空的条件
	 {
 		return 1;  //栈空返回1
	 }
	 return 0;  //否则返回0
 }
 
int pop1(sqstack *t,int data)//入栈 
 {
 	if (!isfull(t))  //如果栈不满,执行下列操作
 	{
 		(t->top)++;//头指针上移一个位置
 		t->a[t->top]=data;  //将元素放入栈指的位置
 		return 1;
 		
	 }
	 return 0; //否则结束入栈
 }
 
 int push1(sqstack *t,int *data)//出栈 
 {
 	if(!note(t))  //如果栈不空
 	{
 		*data=t->a[t->top];//将指针指的元素赋予data
 		(t->top)--;//top指针下移
 		return 1;
	 }
	 else return 0;  //否则结束出栈
 }
 int zhuan(sqstack *t) //进制转换
 {
 	int data=t->top;//定义指针元素为整数类型
 	if(!note(t))//如果指针不空
 	{
 		while(data>=0)                  /*若输入的十进制数为正数*/
    	{
        if(t->a[data]<10)          /*若输入的栈顶元素值小于10*/
        printf("%d",t->a[data]);     /*输出对应进制转换的值*/
        else
        {
            if(t->a[data]==10) printf("a");   /*若输入的栈顶元素值等于10,输出a*/
            else if(t->a[data]==11) printf("b");/*若输入的栈顶元素值等于11,输出b*/
            else if(t->a[data]==12) printf("c");/*若输入的栈顶元素值等于12,输出c*/
            else if(t->a[data]==13) printf("d");/*若输入的栈顶元素值等于13,输出d*/
            else if(t->a[data]==14) printf("e");/*若输入的栈顶元素值等于14,输出e*/
            else printf("f");              /*若输入的栈顶元素值小于10,输出f*/
 		}data--;
 	}
 	
	}
 }
int main() //主函数
 {
 	sqstack *t; //创建t栈
 	
 	int n,m,k,r; //定义n,m,k,r类型
 	int data=0;
	t=Init_seqstack();   //将t初始化
 	printf("请输入要转换的数字:");
 	scanf("%d",&m);//输入的值赋予m
 	printf("请输入转换进制数:"); 
	 scanf("%d",&r);//输入的值赋予r
 	while(m)
 	{
 		n=m%r;/*将被输入的数整除以进制r得到的余数不断赋予n,再将整数部分给与k, 		k=m/r;   然后把k赋予m,依次不断往复,求转化值*/

 	    m=k;
	    pop1(t,n);	//将值输入t栈
	 }
	 zhuan(t);//将栈里的值进行转换
	 while(1)
	 {
	 	push1(t,&n);//元素出栈
	 }
	 printf("\n");
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值