欢迎来到天天文库
浏览记录
ID:51998817
大小:66.50 KB
页数:8页
时间:2020-03-21
《数据结构_运用链栈实现10进制到8进制和16进制的转换运用堆栈实现逆波兰表达式源程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、〃定义链栈〃链栈初始化〃数据入栈〃数据出栈1.实验题目(1)运用链栈实现10进制到8进制和16进制的转换。(2)运用堆栈实现逆波兰表达式2.需求分析入栈的顺序和出栈的顺序对程序的影响,计算方法是“除N取余法”,并且把得出的结果逆序输岀,恰好满足栈先入示出的结构顺序。需要注意逆波兰表达式的执行顺序。3.概要设计(1)主函数main()。(2)定义链栈并初始化ListCall(CaH=(Ca)malloc(sizeof(Calu));(*H)->next=NULL;(*H)->data=O;}intpush(Cal
2、u*top,intx){Calu*temp;temp=(Calu*)malloc(sizeof(Calu));if(temp==NULL)return0;temp->data=x;temp->next二top->next;top->next二temp;return1;}intOut(Calu*top,int*x)H)(3)元素入栈函数push()(4)元素出栈函数Out()(5)表达式计算函数4.详细设计(1)10进制到8进制和16进制的转换代码:#include#include3、.h>typedefstructcalculate{intdata;structcalculate*next;}Calu,*Ca;CaCal;voidUstCal(Ca*H)Calu*temp;temp=top->next;if(temp==NULL)return0;toponext=temp->next;*x=temp->data;free(temp);return*x;}intmain(){charanswer='yr;intnum,num2,numl,num3J;ListCal(&Cal);while(a4、nswer=='y‘){fflush(stdin);numl二0;num3=0;i=0;printfC'iW输入十进制数NH);scanf(”%d”,&num);numl二num;while(numl!=0){num2=numl%8;numl=num昭;push(Cal,num2);i++;}printfC'Ndiv8=");while(i!=0){printf("%d"/Out(Cal,&num3));i-;}printf(””);while(num!=0){num2=num%16;num=num/15、6;push(Cal,num2);//num为十进制数。numl,//num2储存余数,numl储存商〃初始化〃八进制数计算〃并将每个计算结果存入栈中〃计算8进制位数〃将栈屮数据导出,出栈的顺序与进栈顺序相反//16进制数运算〃同样进栈i++;〃计算16进制位数}printfC'Ndiv16=");while(i!=O){printf("%d"/0ut(Cal,&num3));i-;}printfC'calculateagain?(y/n)");scanf("%c'&answer);}system("paus6、eH);return0;}使用说明:10进制数转8进制和16进制:提示先输入10进制数,得出8进制和16进制数结果,判断是否继续输入,输入Y继续输入,否则结束。测试结果:r*wC:ProgramFiles(x86)MicrosoftVisualStudioMyProjectsgfDebuggf.exeRitS/crSWgXN1234Ndiv8=2322Ndiu16=4132calculateagain?请按任意键继续.••(2)逆波兰表达式代码:#include#incl7、ude#defineadd43厂运算符加号+'的ASCII码*/#definesubs45厂运算符减号「的ASCII码*/#definemult42厂运算符乘号的ASCH码*/#definediv47广运算符除号7’的ASCH码*/#defineMAXSIZE100厂定义表达书长度上限为100*/typedefstruct{intstkdata[MAXSIZE];/*用数组来表示栈空间,定义长度为MAXSIZE的栈*/inttop;厂栈顶指针*/}STKzone;typedefSTKzone8、*STK;/*建立一个新的栈*/typedefenum{True=1,False=0}boo;//boo是O+基本类型,true'false是保留字typedefenum{ok,error}status;STKzoneexpSTKzone;STKexpSTK;STKinitSTK(STKzone*stack_zone){严执行栈初始化,建栈指针*/stack_zone->top=-1;
3、.h>typedefstructcalculate{intdata;structcalculate*next;}Calu,*Ca;CaCal;voidUstCal(Ca*H)Calu*temp;temp=top->next;if(temp==NULL)return0;toponext=temp->next;*x=temp->data;free(temp);return*x;}intmain(){charanswer='yr;intnum,num2,numl,num3J;ListCal(&Cal);while(a
4、nswer=='y‘){fflush(stdin);numl二0;num3=0;i=0;printfC'iW输入十进制数NH);scanf(”%d”,&num);numl二num;while(numl!=0){num2=numl%8;numl=num昭;push(Cal,num2);i++;}printfC'Ndiv8=");while(i!=0){printf("%d"/Out(Cal,&num3));i-;}printf(””);while(num!=0){num2=num%16;num=num/1
5、6;push(Cal,num2);//num为十进制数。numl,//num2储存余数,numl储存商〃初始化〃八进制数计算〃并将每个计算结果存入栈中〃计算8进制位数〃将栈屮数据导出,出栈的顺序与进栈顺序相反//16进制数运算〃同样进栈i++;〃计算16进制位数}printfC'Ndiv16=");while(i!=O){printf("%d"/0ut(Cal,&num3));i-;}printfC'calculateagain?(y/n)");scanf("%c'&answer);}system("paus
6、eH);return0;}使用说明:10进制数转8进制和16进制:提示先输入10进制数,得出8进制和16进制数结果,判断是否继续输入,输入Y继续输入,否则结束。测试结果:r*wC:ProgramFiles(x86)MicrosoftVisualStudioMyProjectsgfDebuggf.exeRitS/crSWgXN1234Ndiv8=2322Ndiu16=4132calculateagain?请按任意键继续.••(2)逆波兰表达式代码:#include#incl
7、ude#defineadd43厂运算符加号+'的ASCII码*/#definesubs45厂运算符减号「的ASCII码*/#definemult42厂运算符乘号的ASCH码*/#definediv47广运算符除号7’的ASCH码*/#defineMAXSIZE100厂定义表达书长度上限为100*/typedefstruct{intstkdata[MAXSIZE];/*用数组来表示栈空间,定义长度为MAXSIZE的栈*/inttop;厂栈顶指针*/}STKzone;typedefSTKzone
8、*STK;/*建立一个新的栈*/typedefenum{True=1,False=0}boo;//boo是O+基本类型,true'false是保留字typedefenum{ok,error}status;STKzoneexpSTKzone;STKexpSTK;STKinitSTK(STKzone*stack_zone){严执行栈初始化,建栈指针*/stack_zone->top=-1;
此文档下载收益归作者所有