1、 1 数据结构课程设计报告数据结构课程设计报告 利用线性表进行算式计算利用线性表进行算式计算 2 一:问题描述一:问题描述: 在计算机中,算术表达式由常量、变量、运算符号和括号组成, 由于不同的运算符具有不同的优先级,又要考虑到括号,因此,算术 表达式的求值不可能严格地从左往右进行, 因而在程序设计时, 借助 栈实现。 算法要点: 设置运算符栈和运算数队列辅助分析算符优先关系, 在读入表达式的字符序列的同时,完成运算符和运算数的识别处理, 以及相应运算。 二:需求分析二:需求分析 1 1、输入的形式和输入值的范围、输入的形式和输入值的范围 一个算术表达式,由常量、变量、运算符和括号组成(以字符
2、串的形 式输入) 。 为简化, 规定操作数只能为整数, 操作符为 “+” 、 “-” 、 “*” 、 “/” 、“%” , 用 “#” 开始且用 “#” 结束, 优先级为: 括号-%-*,/-+,-。 2 2、输出的形式、输出的形式 即输出表达式运算结果, 本算法中输出的形式为 The end is: . 3 3、程序所能达到的功能程序所能达到的功能 界面上出现一个文本框,输入一个表达式(以“#”开始并以“#” 3 结束,此表达式包括“+” 、 “-” 、 “*” 、 “/” 、 “%” 、括号以及整数) , 点击回车,显示结果。 4 4、测试结果、测试结果 正确的输入一个表达式是指输入一个正
3、确的表达式即不能连 续输入两个运算符(括号除外) ,切以“#”开始以“#”结束,点击 回车界面上出现 The end is:即此表达式的结果。 输入表达式错误有两种形式: (1) 、所输入的表达式未以“#”开始则点击回车,系统会 提示 “RROE!Please begin with “# “, “且下面输出” Continue?(y/n): “,若输入 Y 或者 y,则再次进入主界面输入表达式,若输入 N 或者 n,则跳出系统。 (2) 、所输入的表达式错误,即连续输入两个运算符,此时 系统会提示“ERROE!Please input another time!“, 三:概要设计三:概要设计
4、主程序的流程图为 4 四:详细设计四:详细设计 1 1、本系统中所用到的抽象数据类型有栈的抽象数据类型以及队列本系统中所用到的抽象数据类型有栈的抽象数据类型以及队列 的抽象数据类型的抽象数据类型。 栈的抽象数据类型定义: ADT Stack 数据对象:D=ai| ai ElemSet,i=1,2,3n,n0 数据关系:R1= next = null; void pushls( slnode *h,char *x) /压栈 slnode *p; p = (slnode *)malloc(sizeof(slnode); strcpy(p-data,x); p-next = h-next; h-next = p; 13 char *popls( slnode *h,char *x) /出栈 slnode *p; p = h-next; if(p!=null) h-next = p-next; return(p-data); return(x); typedef struct qnode /定义链队列结构