欢迎来到天天文库
浏览记录
ID:41657032
大小:98.77 KB
页数:9页
时间:2019-08-29
《实验二栈与迷宫》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验二栈(队列)的创建与应用#include#include#defineMaxSize100#defineMaxOp7struct{charch;〃运算符intpri;〃优先级}lpri[]={{=,0},{'(;1},{‘*;2},{7',2},{宇,3},{-,3},{丁,6)},rpri[]={{= },{f,6},{*,4},{7;4},{屮,2},{-2}Q,1}};intleftpri(charop)〃求左运算符op的优先级{inti;for(i=0;i<
2、MaxOp;i++)if(lpri[i].ch==op)returnlpri[i].pri;}intrightpri(charop)〃求右运算符op的优先级{inti;for(i=0;i3、op1,charop2)//opl和op2运算符优先级的比较结果{if(leftpri(op1)==rightpri(op2))return0;elseif(leftpri(op1)4、ta[op.top]='=';while(*exp!=' '){if(!lnOp(*exp))〃存放运算符〃栈指针〃定义运算符栈〃i作为postexp的卜•标//exp表达式未扌打描完时循环〃为数字字符的情况while(*exp>=,0,&&*exp<='9,)//判定为数字postexp[i++]=*exp;exp++;postexpLi++]=,#';〃用#标识一个数值串结束elsecase-1:〃为运算符的情况switch(Precede(op.data[op.top],*exp))op.top++;o5、p.data[op.top]=*exp;exp++;〃继续扫描其他字符break;〃只有括号满足这种情况op.top-;〃将(退栈exp++;〃继续扫描其他字符break;〃栈顶运算符的优先级低case0:case1:〃退栈并输出到postexp111postexp[i++]=op.data[op.top];op.top—;break;}}while(op.data[op.topj!==')//jtt时exp扫描完毕,退栈到*为止{postexp[i++]=op.data[op.top];op.top—;}po6、stexp[ij= ,;〃给postexp表达式添加结朿标识}floatcompvalue(char*postexp)〃计算后缀表达式的值{structfloatdataLMaxSizeJ;inttop;}St;floatd,a,b,c;st.top=-l;while(*postexp!=W){switch(*postexp){case屮:a=st.data[st.top];st.top-;b=st.data[st.top];〃存放数值〃栈指针〃定义数值栈//postexp7符串未扫描完时循环〃判定为号〃退栈7、収数值a〃退栈収数值b〃计算cst.top-;c=a+b;st.top++;st.data[s匸top]=c;〃将计算结果进栈break;case'・':〃判定为'・号a=st.data[st.top];st.top-;〃退栈取数值ab=st.dataLst.topJ;st.top-;〃退栈取数侑bc=b-a;〃计算Cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为*号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];s8、t.top-;〃退栈取数值bc=a*b;〃计算cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为7'号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];st.top-;〃退栈取数值bif(a!=0)case咏:case/:c=b/a;〃计算cst.top++;st.data[s匸top]=c;〃
3、op1,charop2)//opl和op2运算符优先级的比较结果{if(leftpri(op1)==rightpri(op2))return0;elseif(leftpri(op1)4、ta[op.top]='=';while(*exp!=' '){if(!lnOp(*exp))〃存放运算符〃栈指针〃定义运算符栈〃i作为postexp的卜•标//exp表达式未扌打描完时循环〃为数字字符的情况while(*exp>=,0,&&*exp<='9,)//判定为数字postexp[i++]=*exp;exp++;postexpLi++]=,#';〃用#标识一个数值串结束elsecase-1:〃为运算符的情况switch(Precede(op.data[op.top],*exp))op.top++;o5、p.data[op.top]=*exp;exp++;〃继续扫描其他字符break;〃只有括号满足这种情况op.top-;〃将(退栈exp++;〃继续扫描其他字符break;〃栈顶运算符的优先级低case0:case1:〃退栈并输出到postexp111postexp[i++]=op.data[op.top];op.top—;break;}}while(op.data[op.topj!==')//jtt时exp扫描完毕,退栈到*为止{postexp[i++]=op.data[op.top];op.top—;}po6、stexp[ij= ,;〃给postexp表达式添加结朿标识}floatcompvalue(char*postexp)〃计算后缀表达式的值{structfloatdataLMaxSizeJ;inttop;}St;floatd,a,b,c;st.top=-l;while(*postexp!=W){switch(*postexp){case屮:a=st.data[st.top];st.top-;b=st.data[st.top];〃存放数值〃栈指针〃定义数值栈//postexp7符串未扫描完时循环〃判定为号〃退栈7、収数值a〃退栈収数值b〃计算cst.top-;c=a+b;st.top++;st.data[s匸top]=c;〃将计算结果进栈break;case'・':〃判定为'・号a=st.data[st.top];st.top-;〃退栈取数值ab=st.dataLst.topJ;st.top-;〃退栈取数侑bc=b-a;〃计算Cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为*号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];s8、t.top-;〃退栈取数值bc=a*b;〃计算cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为7'号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];st.top-;〃退栈取数值bif(a!=0)case咏:case/:c=b/a;〃计算cst.top++;st.data[s匸top]=c;〃
4、ta[op.top]='=';while(*exp!=' '){if(!lnOp(*exp))〃存放运算符〃栈指针〃定义运算符栈〃i作为postexp的卜•标//exp表达式未扌打描完时循环〃为数字字符的情况while(*exp>=,0,&&*exp<='9,)//判定为数字postexp[i++]=*exp;exp++;postexpLi++]=,#';〃用#标识一个数值串结束elsecase-1:〃为运算符的情况switch(Precede(op.data[op.top],*exp))op.top++;o
5、p.data[op.top]=*exp;exp++;〃继续扫描其他字符break;〃只有括号满足这种情况op.top-;〃将(退栈exp++;〃继续扫描其他字符break;〃栈顶运算符的优先级低case0:case1:〃退栈并输出到postexp111postexp[i++]=op.data[op.top];op.top—;break;}}while(op.data[op.topj!==')//jtt时exp扫描完毕,退栈到*为止{postexp[i++]=op.data[op.top];op.top—;}po
6、stexp[ij= ,;〃给postexp表达式添加结朿标识}floatcompvalue(char*postexp)〃计算后缀表达式的值{structfloatdataLMaxSizeJ;inttop;}St;floatd,a,b,c;st.top=-l;while(*postexp!=W){switch(*postexp){case屮:a=st.data[st.top];st.top-;b=st.data[st.top];〃存放数值〃栈指针〃定义数值栈//postexp7符串未扫描完时循环〃判定为号〃退栈
7、収数值a〃退栈収数值b〃计算cst.top-;c=a+b;st.top++;st.data[s匸top]=c;〃将计算结果进栈break;case'・':〃判定为'・号a=st.data[st.top];st.top-;〃退栈取数值ab=st.dataLst.topJ;st.top-;〃退栈取数侑bc=b-a;〃计算Cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为*号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];s
8、t.top-;〃退栈取数值bc=a*b;〃计算cst.top++;st.data[s匸top]=c;〃将计算结果进栈break;〃判定为7'号a=st.data[st.top];st.top-;〃退栈取数值ab=st.data[st.top];st.top-;〃退栈取数值bif(a!=0)case咏:case/:c=b/a;〃计算cst.top++;st.data[s匸top]=c;〃
此文档下载收益归作者所有