信息检索上机报告

上传人:cn****1 文档编号:498023226 上传时间:2023-02-18 格式:DOC 页数:9 大小:25.50KB
返回 下载 相关 举报
信息检索上机报告_第1页
第1页 / 共9页
信息检索上机报告_第2页
第2页 / 共9页
信息检索上机报告_第3页
第3页 / 共9页
信息检索上机报告_第4页
第4页 / 共9页
信息检索上机报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《信息检索上机报告》由会员分享,可在线阅读,更多相关《信息检索上机报告(9页珍藏版)》请在金锄头文库上搜索。

1、书山有路勤为径,学海无涯苦作舟。信息检索上机报告 信息储存与检索上机报告 姓名:马云学号:062101日期:2021.5.5 (一)逆波兰变换 一、上机题目: 编写算法和程序,实现布尔检索式的逆波兰变换。 二、试验编程语言:c语言三、程序设计总体思路: 1、建立两个栈。算项指针栈和算符栈。 2、将表达式送入表达式数组,从左向右扫描检索提问表达式中的字符,对当前字符做如下处理: 如果是算项,将指向该算项的指针放到算项栈中。如果是“(”,则“(”无条件进算符栈,如果是“)”,则将算符栈中“(”以及“(”以上的算符出栈。 如果是运算符+-,将他们与算符栈栈顶算符进行比较,如果优先级高于那个算符,将此

2、算符进栈。如果低于算符栈栈顶算符,则把那个算符作为树的根节点。这时算项栈栈顶指针出栈,其所指字符作为右孩子,再将此时算项栈栈顶指针出栈,作为该根节点的左孩子;再将指向该根节点的指针入算项栈。也就是将此时的这棵树作为了一个算项。如此循环直到表达式数组最后一个运算符为终止符“”。一棵表达式二叉树建立完成。 、后序遍历此二叉树,显示逆波兰表达式。 四、程序源代码 #ilude#includicude#inlde ypedeftrtchars0;ittp;s;voicoystr(har*a,ar*b) ini=0;o i=a;i+; whe(ai。0);bi=0; oivoidsq(sq*s) s-t

3、op=-1; intifmpty(s*s) return(stop=); idush(s*s,charc) f(s-op=9) prinf(else -top+; opyst(c,s-s-p); car*pop(sq*s) if(ifempty(s) printf(reur(nl);s retun(s-ss-op-); intjudge(hr*c) if(1=)switch(c0) case:rtun(3);ce:reu();cae*:return(2);cse:return(2);dfult:turn(1);el rtun(); vowrite(char*,cr,harc) srct(,c)

4、;srcat(,b); intsek(char*c,intst) intsinal=1; or(trt=start+;cstat。&sil。0;tart+) if(ctat=))signal-; lef(start=()nl+; if(ignal=0) return(strt-);le prf(输入无效式子nreurn(-1); void(sq*,b) o(;。iemty(a);) pus(b,as-top);po(a); char*rwrt(cha) sqo;sqback; nti,,k,flg=0;char*result;armid20;voidsq(&fnt);dsq(&ack);fo(

5、i;ai。0;) if(ai=() =see(,i); fo(ki+1;2;) fla=0; for(i=0;2;) f(juge(frontsfront.top)=1&juge(ont.sontop-)=2&jdge(fro.sfont.p-2)=) wrte(front.sfottop,frnt.srot.top-1,frnt.sront.to);push(a,frnt.sfrot.to);po(&font);op(&ron);pp(&fot);els ush(&back,front.sfronttop);op(&fot); b(&frot,&back);fb(&bck,&ront);e

6、for(;front.top=;) f(ud(frotsfon.top)=&judge(front.sot.tp1)3&udge(rot.frnttop-2)=1) wrte(ront.sront.tp,front.sfont.tp-1,font.sfront.to-2); sh(&back,ron.sfronttop);pop(&rot);pop(&front);pp(&front);else puh(&ack,fntsfot.to);pp(fron); f(&frot,&back);fb(&back,ront); esult=rot.sfrntop;return(result); vidm

7、ai charr2;chara20; prnt(请输入算式: scanf( ytr(rewrie(a),r); printf(逆波兰式:n%s 五、程序运行结果 将中缀表达式:a(b+(c-d)转换为逆波兰形式 六、上机结果分析与总结 (1)能够实现检索提问表达式的逆波兰形式输出,结果正确。()检索指令必须是精确匹配,友好性不是很好。 (3)程序调试环境为win-tc,不能在中文dos环境下运行,直观性差。 (二)准波兰 一、上机题目: 编写算法和程序,实现布尔检索式的准波兰变换。 二、试验编程语言:语言三、程序设计总体思路: 在逆波兰变换的基础上,进一步实现准波兰变换。()如上题程序中,建立

8、前缀表达式的二叉树。()利用递归调用的思想,将每个节点左右子树的深度进行比较,如果右子树 的深度大于左子树,将它们调换;如果小于或相等,则不动。(3)后序遍历打印二叉树,输出的即为准波兰表达式。 如下图,即为二叉树变换为可以后序遍历生成准波兰表达式的树的过程: 四、程序源代码 /xngan.pp:definestheentrpoitfrheonsolealcation./ #inldeinlude#icude#inclue#inclde pedetuctnde/*结构体*/ chhvaue; structnode*pleftchil,*righchid;指向左右节点的指针*/binode; b

9、nd*geeaeree(ch*formul);/*由一般表达式生成树ntpthtree(inode*prot);oidchangetre(binode*prot); opotorderpinee(ne*proot);/*后续打印/ vodpostoderfretree(bnode*proot);/*释放节点*/vidmain chaforla10,;bindepro; rint(请输入算式:a=fomula;cnf( proot=eneaetee(frmul);/*返回根节点的指针*/pinf(printf(准波兰式是:chanete(poot); posrdrprinttre(oo);pos

10、rderfreetre else sitc(h) ase(:/进栈*/hoer((); ch=pformulidx+;break; ca):/*脱括号*/whe(1) c=popoper;if((=)brea; pnde=(binde)alo(sizeof(binoe);poe-vuc; pnode-plfcild=nul;nod-rightcild=null; i(0。sizenod) pnoe-pightild=opnode;if(。=sizenode) node-lfthil=ppnode;pshnde(pnode); chpforulix+;brek;default: i(0=szeo

11、per|0。=ch&getoprpri(topoper)hvleopoper;pndepeftchl=nll;pnodeprhthd=nul; i(siznde) noe-prighcild=popnode;if(sznod) pnodeeftchi=ponode;pude(pode);/poppr;* beak;pnode=popnode;/*根节点*/eturnnode; itdepthtre(binoe*oo)/*树深度*/itl,r; f(rot=null)return0; ldepthte(proo-ltchild);r=epthtre(protpigtcild);retu(l=r。l+1:r1); odchngetre(depro)/如果右子树大于左子树,交换* bide*ptree=ull;f(nll。=pot) if(depthe(prootplftchld)pighchld))ptree=rooghtchild; poot-pigchildpro

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号