您的位置:首页 > 理论基础 > 数据结构算法

使用栈实现十进制数转化成其他进制

2017-10-03 09:52 543 查看
//利用栈的基本操作实现将任意一个十进制整数转化为R进制整数

//算法:除d取余,倒序取余;十六进制特殊处理 

//http://www.sojson.com/hexconvert.html (在线进制转化)

 

#include<stdio.h>

//类型定义 

typedef int ElementType;

//节点 

typedef struct{

ElementType data;

struct Node* next;

}Node;

//栈头 

typedef struct{

struct Node* next;

}S;

//

int main()

{

//函数原型 

S* stackBuild();

int isEmpty(S* stack);

void Push(S* stack,ElementType e);

ElementType Pop(S* stack);

//void printStack(S*);

//

//tip 

printf("welcome to this conversion of number system...\n"); 

S* stack1=stackBuild();

 

int num;

char ans='y';

while(ans=='y'||ans=='Y')

{

printf("please input a decimal num,num=");

scanf("%d",&num);

getchar();

int R;

printf("which scale(mark it R) do you wanna ,R=");

scanf("%d",&R);

getchar();

int x,y;//余数remainder==y 

x=num/R;

y=num%R;

Push(stack1,y); 

while(x!=0)

{

  num=x;

  x=num/R;

  y=num%R;

  Push(stack1,y);

}

    printf("after transforming,this num become>>>");

while(!(isEmpty(stack1)))

{

int out=Pop(stack1);

switch(out)

   {

    case 10:printf("%c",'a');break;

    case 11:printf("%c",'b');break;

    case 12:printf("%c",'c');break;

    case 13:printf("%c",'d');break;

    case 14:printf("%c",'e');break;

    case 15:printf("%c",'f');break;

    default:printf("%d",out);break;

   }

    } 

   printf("\n");

A1:printf("do you wanna go on...ans=");

   scanf("%c",&ans);

   getchar();//习惯

    

   if(ans!='y'&&ans!='Y'&&ans!='n'&&ans!='N')

  {

printf("input error!input again!\n");

goto A1;

  }

  if(ans=='n'||ans=='N') break;

}

//tip

printf("thank you for trying!!!\n"); 

getchar();

return 0;



//函数原型

 S* stackBuild()

 {

 S*
p=(S*)malloc(sizeof(S));

if(p==NULL) exit(-1);

p->next=NULL;

return p; 

 }

 

 int isEmpty(S* stack)//1-empty

 {

 return
(stack->next==NULL);

 }

 

 void Push(S* stack,ElementType e)

 {

 Node*
p=(Node*)malloc(sizeof(Node));

 if(p==NULL)
exit(-1);

 

 p->data=e;

 p->next=NULL;

 

 p->next=stack->next;

 stack->next=p;//链接

 }

 

 ElementType Pop(S* stack)

 {

 //if(stack->next==NULL)
return NULL;//判空

 if(isEmpty(stack))
return NULL;

 

Node* q=stack->next;//q-pop的节点

ElementType e=q->data;

stack->next=q->next;

free(q);

return e;

 } 

 // 

  

运行效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息