2012112122 唐文博数据结构实验报告【第三章】

2012112122 唐文博数据结构实验报告【第三章】

ID:37049924

大小:313.50 KB

页数:36页

时间:2019-05-17

2012112122 唐文博数据结构实验报告【第三章】_第1页
2012112122 唐文博数据结构实验报告【第三章】_第2页
2012112122 唐文博数据结构实验报告【第三章】_第3页
2012112122 唐文博数据结构实验报告【第三章】_第4页
2012112122 唐文博数据结构实验报告【第三章】_第5页
资源描述:

《2012112122 唐文博数据结构实验报告【第三章】》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据结构实验报告(第三章)实验类型:综合性实验班级:20120616班学号:2012112122姓名:唐文博实验日期:2014年5月24日一、表达式求值1.问题描述表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:2274-*3/11+)和前缀式(如:+11/*22–743)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。2.基本要求l从文件或键盘读

2、入中缀表达式。l设计操作数为多位整数,操作符为加、减、乘、除、求模的中缀表达式求值算法。l设计将中缀表达式转换为后缀表达式的算法。l设计将中缀表达式转换为前缀表达式的算法。l设计后缀表达式求值算法。l设计前缀表达式求值算法。l输出各种形式的表达式。3.数据结构设计任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置,base为栈底指针,在顺序栈中,它始终指向栈底,即top=b

3、ase可作为栈空的标记,每当插入新的栈顶元素时,指针top增1,删除栈顶元素时,指针top减1。typedefstruct{int*base;int*top;intnumstacksize;//数字栈}numstack;typedefstruct{char*base;char*top;intcharstacksize;//字符栈}charstack;4.算法设计(1)中缀表达式求值1.从左到右读入中缀表达式,每次一个字符。2.如果是操作数,压入操作数栈。3.如果是操作符,压入操作符栈。4.如果是左括号,直接忽略。5.如果是有括号,弹出操作符栈栈顶元素,然后弹出操作数栈两个元素,进行

4、操作以后结果压入操作数栈。(2)中缀表达式变后缀表达式1.从左到右读入中缀表达式,每次一个字符。2.如果字符是操作数,直接输出。3.如果是'(',入栈。4.如果是')',则依次把栈中的的运算符加入后缀表达式中,直到出现'(',从栈中删除'('。5.若为除括号外的其他运算符,当其优先级高于除'('以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。6.当扫描的中缀表达式结束时,栈中的的所有运算符出栈。(3)中缀表达式变前缀表达式1.从右至左扫描中缀表达式,从右边第一个字符开始判断。2.如

5、果是数字,则分析到数字串的结尾并将数字串直接输出。3.如果是运算符,则比较优先级。如果当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),则将运算符直接入栈;否则将栈顶运算符出栈并输出,直到当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),再将当前运算符入栈。4.如果是括号,根据括号的方向处理。如果是右括号,则直接入栈;否则,遇右括号前将所有的运算符全部出栈并输出,遇右括号后将左右的两括号一起删除。5.重复上述操作2直至扫描结束,将栈内剩余运算符全部出栈并输出。6.再逆序输出字符串。中缀表达式就转换为前缀表达式了。(4)后缀表达式求值1

6、.从左到右读入后缀表达式2.如果字符是一个操作数,把它压入栈。3.如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈。4.到后缀表达式末尾,从堆栈中弹出结果。若后缀表达式格式正确,那么堆栈应该为空。(5)前缀表达式求值1.从右至左扫描中缀表达式,从右边第一个字符开始判断,2.如果当前字符是数字,则分析到数字串的结尾并将数字入栈。3.如果是运算符,则将栈中最上面两个数字弹出并进行相应的运算。结果入栈。4.一直扫描到表达式的最左端时,最后栈中的值也就是表达式的值。5.主要操作对数字栈的操作和对字符栈的操作类似,以下只写出对字符栈的操作。//构建一个字符空栈status

7、initstack(charstack&s){s.base=(char*)malloc(stack_init_size*sizeof(char));if(!s.base)exit(-2);//如果地址申请失败,退出s.top=s.base;//栈顶栈尾指向同一位置s.charstacksize=stack_init_size;cout<<"准备完毕,请输入表达式:"<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。