数制转换.pdf
实验二 栈的应用(数制转换)一、实验目的 掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。二、实验要求 1 认真阅读和掌握本实验的算法。2 上机将本算法实现。3 保存程序的运行结果,并结合程序进行分析。三、实验内容 利用栈的基本操作实现将任意一个十进制整数转化为R 进制整数。算法为:1、定义栈的顺序存取结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)3、定义一个函数用来实现上面问题:(1)十进制整数 X 和 R 作为形参(2)初始化栈(3)只要 X 不为 0 重复做下列动作 将 X%R入栈,X=X/R(4)只要栈不为空重复做下列动作 栈顶出栈,输出栈顶元素 四、实验报告要求:1、十进制整数转化为 R 进制整数算法的代码:#includestdio.h#includestdlib.h typedef struct int data50;int top;stack,*pstack;/*栈的初始化*/pstack Init_SeqStack(void)pstack s;s=(pstack)malloc(sizeof(stack);if(s)s-top=-1;return s;/*判栈空*/int Empty_SeqStack(pstack D)if(D-top=-1)return 1;else return 0;/*元素进栈函数*/int Push_SeqStack(pstack H,int x)if(H-top=49)return 0;else H-top+;H-dataH-top=x;return 1;/*元素出栈函数*/int Pop_SeqStack(pstack head,int*x)if(Empty_SeqStack(head)return 1;else *x=head-datahead-top;head-top-;return 1;/*栈的销毁*/void Destroy_SeqStack(pstack*s)if(*s)free(*s);*s=NULL;return;/*数制转换函数*/int conversion(int n,int r)pstack s;int x,k;if(!r)printf(基数不能为 0n);return 0;s=Init_SeqStack();if(!s)printf(栈初始化失败n);return 0;while(n)Push_SeqStack(s,n%r);n=n/r;printf(转换后的数为:nn);while(!Empty_SeqStack(s)Pop_SeqStack(s,&x);printf(%3d,x);Destroy_SeqStack(&s);return 1;void main()int m,n;printf(请输入一个你要转换的十进制整数:n);scanf(%d,&m);printf(请输入你想要得到的数制的基数:n);scanf(%d,&n);conversion(m,n);printf(n);2、程序运行结果及分析:3、实验总结。该实验是将一个十进制数利用辗转相除的方式转换成任意进制,其间需要对栈进行初始化、判空、元素进栈和出栈等操作,最后释放栈空间;通过这些操作来加深对它们的认识。