百度文库- 让每个人平等地提升自我11 实验二栈的应用 ( 数制转换 ) 一、 实验目的掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。二、实验要求1. 认真阅读和掌握本实验的算法。2. 上机将本算法实现。3. 保存程序的运行结果,并结合程序进行分析。三、实验内容利用栈的基本操作实现将任意一个十进制整数转化为R进制整数算法为:1、定义栈的顺序存取结构2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)3、定义一个函数用来实现上面问题:(1) 十进制整数 X 和 R作为形参(2) 初始化栈(3) 只要 X 不为 0 重复做下列动作将 X % R入栈 , X=X/R (4) 只要栈不为空重复做下列动作栈顶出栈 , 输出栈顶元素四、实验报告要求:1、十进制整数转化为R进制整数算法的代码;2、程序运行结果及分析;3、实验总结。1. 实验源码:#include"" #include"" #include"" #define maxsize 100 typedef struct{ int data[maxsize]; 百度文库- 让每个人平等地提升自我22 int top; }seqstack,*pseqstack; pseqstack setstack() { pseqstack s; s=(pseqstack)malloc(sizeof(seqstack)); if(s) s->top=-1; return s; } int empty(pseqstack s) { if(s->top==-1)return 1; else return 0; } pseqstack pushin(pseqstack s,int m,int r) { if(s->top==maxsize-1) printf("此栈已满,无法入栈! \n"); else 百度文库- 让每个人平等地提升自我33 { while(m!=0) { s->top++; s->data[s->top]=m%r; m=(m-(m%r))/r; } } return s; } int popout(pseqstack s) { if(empty(s)) return 0; else { printf("转化后的数是: "); while(s->top!=-1) { printf("%d",s->data[s->top]); s->top--; } 百度文库- 让每个人平等地提升自我44 putchar('\n'); return 1; } } void main() { int m,r; pseqstack p; p=(pseqstack)malloc(sizeof(seqstack)); printf("请输入一个十进制的正整数:"); scanf("%d",&m); printf("请输入你想转化的进制位:"); scanf("%d",&r); p=setstack(); p=pushin(p,m,r); popout(p); } 2. 程序截图:百度文库- 让每个人平等地提升自我55 3. 实验总结: