欢迎来到天天文库
浏览记录
ID:13146256
大小:227.00 KB
页数:27页
时间:2018-07-20
《数据结构程序设计---求解算术表达式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构课程设计题目 求解算术表达式姓名吴楚杰汤友松杨基长徐涛杨剑学号 3330363537系别 计算机系专业 网络工程级别 2008班级 二班2009年12月30日一、问题描述:设计一个程序,求解算术表达式。【基本要求】以字符序列的形式从键盘输入语法正确的、不含变量的整数表达式,实现对算术四则混合运算表达式的求值。二、问题分析:1) 数据结构描述1、为了实现算符优先算法使用两个工作栈,一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。2、在操作数和操作符入栈前,通过一个函数来判别,输入的是操作数还是操作符,操作数入OPND,操作符入OPTR。3
2、、 开始将‘#’入操作符栈,通过一个函数来判别算术运算符的优先级。且规定‘#’的优先级最低。在输入表达式的最后输入‘#’,代表表达式输入结束。在表达式输入过程中,遇操作数则直接入栈。遇到运算符则与栈顶运算符比较优先级,当前运算符优先级高(前面的运算还不应执行)则当前运算符入栈,扫描下一符号;否则栈顶运算符出栈,两操作数出栈,进行运算,所得结果入数栈,重新比较当前运算符(注意当前运算符未变)与新栈顶运算符。如此重复直到栈顶运算符与当前符号均为‘#’,运算结束。4、通过字符型数组的比较确定进入工作界面的密码。原始密码已经定了,但是注册的密码由一个数组来保存。再次登录的时候就可以通过比较原始密码
3、和注册码来决定是否进入。而且登陆次数限定在三次,错误次数也限定在三次。这样就人性化的允许犯错,但是又可以防止不法分子的偷盗行为。2)主要算法流程描述:1、栈的节构体形式typedefstructSqstack//计算数的结构体{elemtype*top;//栈顶指针elemtype*base;//栈底指针elemtypestacksize;//栈的大小}Sqstack,*Linklist;//机构体名和结构体指针typedefstructSqstack1//计算符的结构体{char*top;char*base;elemtypestacksize;}Sqstack1,*Linklist1;2
4、、栈的初始化elemtypeinitstack(Linklists)//初始化栈{s->base=(elemtype*)malloc(stack_size*sizeof(elemtype));if(!s->base)returnERROR;s->top=s->base;s->stacksize=stack_size;returnOK;}elemtypeinitstack1(Linklist1s)//初始化栈{s->base=(char*)malloc(stack_size*sizeof(char));if(!s->base)returnERROR;s->top=s->base;s->sta
5、cksize=stack_size;returnOK;}3、入栈elemtypepush(Linklists,elemtypee)//进栈{if(s->top-s->base>=s->stacksize){s->base=(elemtype*)realloc(s->base,(s->stacksize+stack_increasement)*sizeof(elemtype));if(!(s->base))return0;s->top=s->base+s->stacksize;s->stacksize+=stack_increasement;}*(++s->top)=e;return1;}e
6、lemtypepush1(Linklist1s,chare)//进栈{if(s->top-s->base>=s->stacksize){s->base=(char*)realloc(s->base,(s->stacksize+stack_increasement)*sizeof(char));if(!(s->base))return0;s->top=s->base+s->stacksize;s->stacksize+=stack_increasement;}*(++s->top)=e;return1;}4、取栈顶元素elemtypegettop(Sqstacks)//取栈顶元素{elemt
7、ypee;if(s.top==s.base){printf("Nonumberleft!");returnERROR;}e=*s.top;returne;}chargettop1(Sqstack1s)//取字符栈顶元素{chare;if(s.top==s.base)//判断有无字符{printf("Nonumberleft!");returnERROR;}e=*s.top;returne;}5、栈的优先级判断及其函数 +
此文档下载收益归作者所有