基于栈的进制转换实例
CYY

一个进制转换的小程序,利用栈数据结构的特性

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
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 200
typedef struct{
//这里采用不同于算法总结帖子里的方法建立栈
int *top; //指向栈顶
int *base; //指向栈底
int SIZE;
}Stack;
Stack *initStack(){
Stack *s = (Stack*)malloc(sizeof(Stack)); //动态声明一个栈
s->SIZE = MAXSIZE; //设置栈的最大大小
s->base = (int*)malloc(MAXSIZE*sizeof(int));//动态生成一个数组将数组首地址赋值给s->base,数组大小为MAXSIZE
s->top = s->base; //初始化栈时栈为空,所以栈顶指针与栈底指针指向数组首地址
return s;
}
//判断栈是否为空,当栈顶与栈底指向同一块区域则表明栈为空
int isEmpty(Stack *s){
if(s->base == s->top) return 1;
return 0;
}
//判断栈是否满,如果栈顶-栈底等于栈的最大长度则满
int isFull(Stack *s){
if(s->top - s->base == s->SIZE) return 1;
return 0;
}
//压栈,先判断栈是否满,未满则将数据存入,栈顶指针++
int push(Stack *s,int data){
if(!isFull(s)){
*(s->top) = data;
s->top++;
return 1;
}
return 0;
}
//出栈,先判断栈是否空,不为空则将数据弹出,栈顶指针--
int pop(Stack *s,int *data){
if(!isEmpty(s)){
*data = *(s->top-1);
s->top--;
return 1;
}
return 0;
}

int main(){
printf("请输入一位数:");
int num;
scanf("%d",&num);
printf("请输入转换的进制:");
int n;
scanf("%d",&n);
int next = num;
Stack *s = initStack(); //申请一个栈
//利用栈先进后出的原理,将进制转换的余数依次放入栈中,最后在依次出栈,出栈顺序即为进制数
while(next != 0){
push(s,next % n );
next = next / n;
}
//循环出栈直到栈空
while(!isEmpty(s)){
int data;
pop(s,&data);
printf("%d",data);
}
return 0;
}
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep