收藏 分销(赏)

数据结构大作业.doc

上传人:二*** 文档编号:4544362 上传时间:2024-09-27 格式:DOC 页数:6 大小:78KB
下载 相关 举报
数据结构大作业.doc_第1页
第1页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 . . . . 电子与信息工程学院数据结构大作业系 别:电子与信息工程学院 班 级:姓 名:学 号:指导教师:数据结构实验报告一、 实验目的表达式求值。一个算术表达式是由操作数、运算符和界限符组成。假设操作数是正整数,运算符只含加减乘除四种运算符,界限符有左右括号和表达式起始、完毕符“。要求从键盘读入一个合法的算术表达式,输出正确的结果,并显示输入序列。二、数据结构设计任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来存放表达式的操作数和运算符。栈是限定于紧仅在表尾进展插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设栈

2、顶指针指示栈顶元素在顺序栈中的位置,栈底为栈底指针,在顺序栈中,它始终指向栈底,即栈顶指针=栈底指针可作为栈空的标记,每当插入新的栈顶元素时,栈顶指针增1,删除栈顶元素时,栈底指针减1。三、总体设计1.首先置操作数栈为空栈,表达式起始符#为运算符栈的栈底元素;2.依次读入表达式,假设是操作符即进栈,假设是运算符那么和栈的栈顶运算符比拟优先权后作相应的操作,直至整个表达式求值完毕即栈的栈顶元素和当前读入的字符均为#。四、主要界面主界面输入3+5#后:输入3+2*4+1/2后:五、心得体会通过设计表达式求值这个程序,我学到了很多知识,对堆栈的应用更加熟练,也对程序设计有了新的看法。虽然设计过程当中

3、遇到了很多困难,但我通过查资料,请教同学都一一成功的解决了,最总完成了他的设计,我感觉通过他我学到了很多。六、附录源程序:#include #include #include #include #define MAX 10 /定义堆栈最大容量void push_opnd(char);/操作数堆栈入栈操作float pop_opnd(); /操作数堆栈出栈操作void push_optr(char);/操作符堆栈入栈操作char pop_optr(); /操作符堆栈出栈操作char relation(char,char);/比拟两个操作符的优先级float operate(float,char,

4、float);/运算float opndMAX; /操作数堆栈char optrMAX; /操作符堆栈int topd=0; /栈顶指针初始化int top=0;char symb30; /表达式字符串int main()int i=0; char sy; float a,b; printf(本程序实现表达式求值的操作。可以进展加减乘除运算。n); printf(这是堆栈应用的一个例子n); /- printf(请输入表达式(以#完毕):n例如: 3*(3+2)/5#n); push_optr(#); gets(symb); /输入表达式,以#为完毕符 while(symbi!=#)|(opt

5、rtop!=#) if(symbi!=+)&(symbi!=-)&(symbi!=*)&(symbi!=/) &(symbi!=()&(symbi!=)&(symbi!=#)&(symbi!= ) push_opnd(symbi);i+; /如果当前字符不是操作符,那么入操作数栈,字符串指针加一 else switch(relation(optrtop,symbi) /假设是操作符,比拟其和操作符栈的栈顶元素的优先级 case :sy=pop_optr();b=pop_opnd(); /假设优先级高,那么栈顶元素退栈,进展运算 a=pop_opnd(); topd=topd+1; opndto

6、pd=operate(a,sy,b); /把运算结果入栈 break; case :printf(语法错误!n);exit(0); printf(运算结果=%1.2fn,opndtopd); printf(程序完毕,按任意键退出!n); getch();void push_opnd(char ch)int ch_i; ch_i=ch-0; /把字符换算成数字,并入操作数栈 topd+; opndtopd=ch_i;float pop_opnd() /操作数栈出栈topd=topd-1; return opndtopd+1;void push_optr(char ch)/操作符入栈 top+;

7、optrtop=ch;char pop_optr() /操作数出栈 top-; return optrtop+1;char relation(char sym1,char sym2) /比拟两个操作符的优先级 int i; char chl2; int ind2; char re77=, , ,=; chl0=sym1; chl1=sym2; for(i=0;i=1;i+) switch(chli) case +:indi=0;break; case -:indi=1;break; case *:indi=2;break; case /:indi=3;break; case (:indi=4;

8、break; case ):indi=5;break; case #:indi=6;break; default:printf(Error!n);return(0); return(reind0ind1);float operate(float a,char sym,float b) /进展运算 float re; switch(sym) case +:re=a+b;break; case -:re=a-b;break; case *:re=a*b;break; case /:re=a/b;break; default:printf(Error!n);return(0); return re;6 / 6

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服