进制转换和栈

来源:互联网 发布:上海游奇网络老板是谁 编辑:程序博客网 时间:2024/06/05 15:36

用递归和栈进行进制转换。

通过编写代码,熟悉了递归函数原理和栈的基本原理。

#include<stdio.h>#include<stdlib.h>#define N 10000struct stack{int top;       //栈顶int data [N];};struct stack selfstack = { -1,{0} }; //栈的初始化int isempty() //判断 ,1为空 0非空{if (selfstack.top == -1){return 1;}else{return 0;}}void setempty()   //栈设置为空{selfstack.top = -1;}int  push(int num)  //压入数据,成功1,失败返回0{if (selfstack.top==N-1){return 0;   //失败}else {selfstack.top += 1;selfstack.data[selfstack.top] = num;return 1;}}int pop(){if (selfstack.top == -1){return -1;//栈为空}else{selfstack.top -= 1;return selfstack.data[selfstack.top + 1];  //返回弹出的数据}}int tentotwo(int num){if (num != 0){int m = num % 2;//printf("%d", m);//放在递归函数之前顺序打印tentotwo(num / 2);printf("%d", m);//放在递归函数之后,逆序打印}}int B(int i)//转换成8进制{if (i != 0){int j = i % 8;B(i / 8);printf("%d", j);}else{}}void main (){tentotwo(10); //用递归把10转换二进制1010printf("\n");int num = 10; //用栈把10转换二进制1010while (num){push(num % 2);//压入数据num /= 2;  //循环}while (!isempty()){printf("%d", pop());}printf("\n");B(10);//把10转换成8进制12//简单的栈操作,逆序打印出数组元素int a[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i != 10; ++i){push(a[i]);}while (!isempty()){printf("\n%d", pop());}system("pause");}
运行结果:

1010
1010
12
10
9
8
7
6
5
4
3
2
1请按任意键继续...

阅读全文
0 0
原创粉丝点击