数据结构课程设计报告-表达式求值(共11页).doc
《数据结构课程设计报告-表达式求值(共11页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-表达式求值(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构课程设计利用栈求表达式的值 班级: 2 学号: 0 姓名: 吴迪 指导老师: 王方利用栈求表达式的值1、 设计思路这个程序的关键是对数字与运算符的判断和运算符优先级的判断,以及出栈的运算。建立两个栈,分别存储数字与运算符,栈1存运算符,栈2存数字。依次读取表达式的字符串,先判断是数字还是运算符,如果是数字不能马上压入栈2,因为可能是大于10的数字,应该继续循环,如果还是数字,则利用计算保存数值,直到指到运算符时停止,将计算后的数字压入栈2。压入运算符之前先将要压入的与栈顶的运算符优先级相比较,如果栈顶是(而当前不是),则不需比较优先级,直接压入;如果栈顶是(,
2、当前是),则抵消(弹出(,指向表达式下一个字符);若当前的运算符优先级大于栈顶的,则压入;若当前的运算符优先级小于栈內时,弹出栈顶的运算符,同时弹出两组数字,经过运算符的运算后再重新压到栈内。为了方便判断运算结束,在存储运算符之前先将#压入栈1中,在输入表达式时以“#”结束,所以可以以运算符=#并且栈1顶=#来结束运算,弹出栈2的数值,即为表达式求值的最终结果。上述操作的算法步骤:(1) 初始化算符S1,数字栈S2;,将#压入算符栈S1中。(2) 读表达式字符=w。(3) 当栈顶为#并且w也是#时结束;否则循环做下列步骤:(3-1)如果w是数字,存储到m,再经过计算存储到num中。m=w-0;
3、num=num*pow(10,n)+m;n+;读下一个字符=w,如果是运算符,则跳出循环;转3-2。(3-2)w若是运算符,则:(3-2-1)如果栈顶为(并且w为)则(出栈,读下一个字符=w;转(3)。(3-2-2)如果栈顶为(或者栈顶优先级小于w优先级,则w入栈,读下一个字符=w;转(3)。否则:从算符栈中出栈,并从数字栈中弹出两组数字进行运算,将结果重新压入数字栈,转(3)。2、 数据结构设计前面提到,要用栈存储数据,由于一个数字一个运算符,所以要定义两个不同的栈,栈1的运算符为字符型;栈2的数字为浮点型,以便运算大数字。再给存储的数据个数加个上制。具体结构定义如下:#define MAX
4、SIZE 100typedef structchar dataMAXSIZE; /*字符型,存储运算符*/int top;charSeqStack,*charPSeqStack;typedef structdouble dataMAXSIZE; /*浮点型,存储数字*/int top;SeqStack,*PSeqStack;3、 功能函数设计(1)判断操作数的函数isnum()判断当前所指字符是否属于数字,是就返回1,不是返回0。(2)求运算符优先级函数priority()为了方便判断运算符优先级,先利用switch函数将不同的运算符返回不同的整型数字,再根据数字的大小判断优先级。+、-优先级
5、相同,返回相同数字,*、/也是。(3)表达式求值函数infix_value()此函数是直接按照设计思路完成问题要求的函数,其中要调用到判断操作符的函数isnum()和求运算符优先级的函数priority()。循环结束弹出栈2的数值,并返回。(4) 主函数main()定义一个数组存储表达式整个字符串,将返回的数值直接赋到浮点型的result,输出result。(5) 两个栈的函数设计:栈的初始化函数charInit_SeqStack()Init_SeqStack() 判栈空 Empty_SeqStack()charEmpty_SeqStack()入栈函数 Push_SeqStack()charP
6、ush_SeqStack()出栈函数 Pop_SeqStack()charPop_SeqStack()取栈顶函数 GetTop_SeqStack() charGetTop_SeqStack()销毁栈 Destroy_SeqStack()charDestroy_SeqStack()4、 程序代码#include#include#include#define MAXSIZE 100typedef structdouble dataMAXSIZE;int top;SeqStack,*PSeqStack;typedef structchar dataMAXSIZE;int top;charSeqSta
7、ck,*charPSeqStack; /*定义栈,两个不同的存储类型*/ PSeqStack Init_SeqStack(void)PSeqStack S;S=(PSeqStack)malloc(sizeof(SeqStack);if(S)S-top=-1;return S;charPSeqStack charInit_SeqStack(void)charPSeqStack S;S=(charPSeqStack)malloc(sizeof(charSeqStack);if(S)S-top=-1;return S; /*栈的初始化函数*/int Empty_SeqStack(PSeqStack
8、S)if(S-top=-1)return 1;elsereturn 0;int charEmpty_SeqStack(charPSeqStack S)if(S-top=-1)return 1;elsereturn 0; /*判断栈空函数*/int Push_SeqStack(PSeqStack S,double x)if(S-top=MAXSIZE-1)return 0;elseS-top+;S-dataS-top=x;return 1;int charPush_SeqStack(charPSeqStack S,char x)if(S-top=MAXSIZE-1)return 0;elseS-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 表达式 求值 11
限制150内