欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

数据结构 中数制转换(栈的应用)

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

数据结构 中数制转换(栈的应用)

问题描述:

 将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题。

解答:按除2取余法,得到的余数依次是1、0、1、1,则十进制数转化为二进制数为1101。

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

代码如下:

#include<stdio.h> 
#include<malloc.h> 
#include<stdlib.h> 
typedef struct Node 
{ 
 int data; 
 struct Node * pNext; 
}NODE ,*PNODE; 
typedef struct Stack 
{ 
 PNODE pTop; 
 PNODE pBottom; 
}STACK,*PSTACK; 
 
bool empty(PSTACK ps) 
{ 
 if(ps->pTop == ps->pBottom) 
 return true; 
 else return false; 
} 
void initstack(PSTACK ps) 
{ 
 ps->pTop=(PNODE)malloc(sizeof(NODE)); 
 if (NULL == ps->pTop) 
 { 
  printf("初始化失败!\n"); 
  exit(-1); 
 } 
 else 
 { 
 ps->pBottom=ps->pTop; 
 ps->pTop->pNext=NULL; 
 } 
 return ; 
} 
 
void push(PSTACK ps,int val) 
{ 
 PNODE pNew=(PNODE)malloc(sizeof(NODE)); 
 pNew->data=val; 
 pNew->pNext=ps->pTop; 
 ps->pTop=pNew; 
 return; 
} 
void pop(PSTACK ps) 
{ 
 int x; 
 if(empty(ps)) 
 { 
  //printf("出栈失败!"); 
  return ; 
 } 
 else 
 { 
   PNODE p=ps->pTop; 
   x=p->data; 
   ps->pTop=p->pNext; 
   free(p); 
   p=NULL; 
   printf("%d",x); 
   return ; 
 } 
} 
int main() 
{ 
 int i,N,B; 
 STACK S; 
 scanf("%d",&N); 
 scanf("%d",&B); 
 initstack(&S); 
 while(N) 
 { 
  push(&S,N%B); 
  N=N/B; 
 } 
 while(S.pBottom!=NULL) 
 { 
  pop(&S); 
   
 } 
 system("pause"); 
 return 0; 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:C++中的菱形继承深入分析

栏    目:C语言

下一篇:C++实现银行排队系统

本文标题:数据结构 中数制转换(栈的应用)

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/1401.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有