首页 > 编程 > C > 正文

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

2020-01-26 14:02:51
字体:
来源:转载
供稿:网友

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

问题描述:

 将一个非负的十进制整数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; } 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选