北京理工大学珠海学院《数据结构》课程设计报告 题目:____________算术表达式求值_________________所在学院:班级:学生姓名:指导教师:2010年 05 月 26 日目录 1.前言··································································································1 2.概要设计··································································································1 2.1 数据结构设计······················································································································1 2.2 算法设计···························································································································1 2.3 ADT 描述··························································································································2 2.4 功能模块分析····················································································································2 3.详细设计··································································································3 3.1 数据存储结构设计················································································································3 3.2主要算法流程图 (或算法伪代码)··························································································3 4 .软件测试··································································································6 5.心得体会··································································································8 参考文献······································································································8 附 录···········································································································8北京理工大学珠海学院计算机科学技术学院 1.前言在计算机中,算术表达式由常量、变量、运算符和括号组成。
c语言程序设计视频教程 曾怡教授讲解 全28讲完整版下载 c语言视频教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。c语言程序设计视频教程 曾怡教授讲解 全28讲完整版下载 c语言程序视频教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。《c语言程序设计》视频教程(曾怡) c语言程序设计教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。
1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先 权后作相应的操作,直至整个表达式求值完毕 (即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。1第 页数据结构课程设计 2.3 ADT 描述ADT Stack{数据对象:D {| ∈ElemSet,i 1,2,…,n, n≧0}a ai i数据对象:R1 {|a ,a D ,i 2,…,n}i i1 i1 i约定 端为栈顶, 端为栈底。aani基本操作:InitStack(&S)操作结果:构造一个空栈S。GetTop(S)初始条件:栈S 已存在。操作结果:用P 返回S 的栈顶元素。Push(&S,ch)初始条件:栈S 已存在。操作结果:插入元素ch 为新的栈顶元素。Pop(&S)初始条件:栈S 已存在。操作结果:删除S 的栈顶元素。In(ch)操作结果:判断字符是否是运算符,运算符即返回1。Precede(c1,c2)初始条件:c1,c2 为运算符。操作结果:判断运算符优先权,返回优先权高的。
4、size操作(返回当前栈中的元素个数)。并且如果是方法内部需要执行运算时,无非就是对操作数栈中的栈顶元素频繁地执行入栈和出栈操作而已。}对于出栈操作pop,代码如下:/*若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok。
(2)Precede(char c1,char c2) 判断运算符优先权功能,该函数判断运算符c1,c2 的优先权,具体优 先关系参照表 1。(3)Operate(int a,char op,intb)操作数用对应的运算符进行运算功能。运算结果直接返回。(4)num(intn) 求操作数的长度功能数据结构表达式求值,需要用itoa 函数把int 型转换成字符串型,strlen 函数可求 字符长度。(5)EvalExpr()主要操作函数运算功能。分析详细见 “3.详细设计…3.2”。 3.详细设计 3.1 数据存储结构设计因为表达式是由操作符,运算符和界限符组成的。如果只用一个char类型栈,不能满足2 位以 上的整数,所以还需要定义一个int 类型的栈用来寄存操作数。/* 定义字符类型栈 */typedef struct{int stacksize;char *base;char *top;}Stack;/* 定义整型栈 */typedef struct{int stacksize;int *base;int *top;}Stack2; 3.2 主要算法流程图 (或算法伪代码) 1.Precede(char c1,char c2) 判断运算符优先权,返回优先权高的。
算符间的优先关系如下:3第 页数据结构课程设计+-*/()#+><<<<>>->><<<>>*>>>><>>/>>>><>>(<<<<>>>>>#<<<<','>','','>', '>','>','','>', '>','>','>','>','','>', '>','>','>','>','','>', '','>','>','>','!', '>','>', '
算法概要流程图: 利用该算法对算术表达式3*(7-2)求值操作过程如下:步骤OPTR 栈 OPND 栈 输入字符主要操作1#3*(7-2)#Push(OPND,’3’)2#3*(7-2)#Push(OPTR,’*’)3#*3(7-2)#Push(OPNR,’(’)4#*(37-2)#Push(OPND,’7’)5#*(37-2)#Push(OPNR,’-’)6#*(-372)#Push(OPND,’2’)7#*(-372)#Operate(‘7’,’-’,’2’)8#*(3 5)#Pop(OPTR)9#*3 5#Operate(‘3’,’*’,5’)10#15#Return(GetTop2(OPND))表2 算法伪代码如下: int EvalExpr()//主要操作函数 {c *ptr++; while(c! '#'||GetTop(OPTR)! '#') { if(!In(c))//不是运算符即进栈 {if(!In(*(ptr-1)))ptr ptr-1;5第 页数据结构课程设计 m atoi(ptr);//取字符串前面的数字段 n num(m); Push2(&OPND,m); ptr ptr+n; c *ptr++; } else switch(Precede(GetTop(OPTR),c)) { case''://退栈并将运算结果入栈 theta Pop(&OPTR); b Pop2(&OPND);a Pop2(&OPND); Push2(&OPND,Operate(a,theta,b)); break; } } 4.软件测试 1.运行成功后界面。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-112082-1.html