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

时间:2022-06-01 19:13:06

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

问题描述:

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

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

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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;
}

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

原文链接:http://blog.csdn.net/chenglove1314/article/details/38457357