首页 考试资料幻灯片工程技术公务员考试小学教学中学教学大学教学外语资料
数据结构课设报告-算术表达式求值


课 程 设 计 报 告

课程名称:

数据结构

题目名称:

算术表达式求值

学生姓名:学号:

课程成绩:

二零一六 年六 月

1.需求分析
本演示程序用 C++6.0 编写,完成栈的生成。 (1)输入的形式和输入值的范围:输入合法表达式,以“#”结尾;输入的 操作数是正整数,运算符只含加减乘除四种运算符。 (2)输出的形式:显示输入是否正确、输入序列和栈的变化过程、计算结 果。 (3)程序所能达到的功能:完成算术表达式的计算。 (4)测试数据: ①输入 3*(2+4)#; ②输入 5*-2#。

2.概要设计
(1)为了实现上述程序功能,需要定义栈的抽象数据类型: ADT SqStack{ 数据对象:D={ai| ai ∈ElemSet,i=1,2,3??,n,n≥0} 数据关系:R1={<ai-1,ai>| ai-1,ai ∈D,i=1,2,3,??,n} 基本操作: InitStack(SqStack &S) 操作结果:声明栈建立函数 Push(SqStack &S,char e) 初始条件:栈已经存在 操作结果:声明入栈函数 Pop(SqStack &S) 初始条件:栈已经存在 操作结果:声明出栈函数 DispStack(SqStack &S) 初始条件:栈已经存在 操作结果:从栈底到栈顶依次输出各元素 (2)本程序包括 5 个函数: ①主函数 main()

②确定如何入栈函数 evaluate() ③声明取栈顶元素函数 GetTop() ④声明比较函数 Compare() ⑤声明运算函数 Operate()

各函数间关系如下: InitStack main evaluate push DispStack Compare Pop GetTop Operate

3.详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程 序和其他模块也都需要写出伪码算法。 (1)栈和指针类型 typedef struct //运算符栈 { SElemType *base; SElemType *top; int stacksize;

}SqStack1;

typedef struct //运算数栈 { SElemType2 *base;

SElemType2 *top; int stacksize; }SqStack2; (2)栈的基本操作 void InitStack1(SqStack1 &S1)//构造一个空栈 S1 { S1.base=new SElemType[STACK_INIT_SIZE]; if(!S1.base)cout<<"存储分配失败!";//存储分配失败 S1.top=S1.base; S1.stacksize=STACK_INIT_SIZE; } void InitStack2(SqStack2 &S2)//构造一个空栈 S2 { S2.base=new SElemType2[STACK_INIT_SIZE]; if(!S2.base)cout<<"存储分配失败!";//存储分配失败 S2.top=S2.base; S2.stacksize=STACK_INIT_SIZE; } void Push1(SqStack1 &S1,char e)//入栈 { if(S1.top-S1.base>=S1.stacksize)//如果栈满,追加存储空间 { S1.base=(char *)realloc(S1.base,(S1.stacksize+STACKINCREMENT)*sizeof(char)); if(!S1.base) else { S1.top=S1.base+S1.stacksize; S1.stacksize=S1.stacksize+STACKINCREMENT; cout<<"存储分配失败!";

} } *S1.top=e;S1.top=S1.top+1;//将元素压入栈中,指针上移 } void Push2(SqStack2 &S2,float e)//入栈 { if(S2.top-S2.base>=S2.stacksize)//栈满,追加存储空间 { S2.base=(float *)realloc(S2.base,(S2.stacksize+STACKINCREMENT)*sizeof(float)); if(!S2.base)cout<<"存储分配失败!"; else { S2.top=S2.base+S2.stacksize; S2.stacksize=S2.stacksize+STACKINCREMENT; } } *S2.top=e;S2.top=S2.top+1;//将元素 e 入栈,指针上移 } char Pop1(SqStack1 &S1)//出栈 { char e; if(S1.top==S1.base)cout<<"nttt 运算符栈已空!n"; e=*(--S1.top); return e; } float Pop2(SqStack2 &S2)//出栈 { float e;

if(S2.top==S2.base)cout<<"ntt 运算数栈已空!"; e=*(--S2.top); return e; } void DispStack1(SqStack1 &S1)//从栈底到栈顶依次输出各元素 { char e,*p; if(S1.top==S1.base)cout<<""; else { p=S1.base; while(p<S1.top) { e=*p; p++; cout<<e; } } } void DispStack2(SqStack2 &S2)//从栈底到栈顶依次输出各元素 { float e,*p; if(S2.top==S2.base)cout<<""; else { p=S2.base; while(p<S2.top) { e=*p;

p++; cout<<e; } } } (3)其他模块伪码算法 void main() { SqStack1 S1;//定义运算符栈 SqStack2 S2;//定义运算数栈 InitStack1(S1);//调用栈建立函数 InitStack2(S2);//调用栈建立函数 evaluate(S1,S2);//调用确定如何入栈函数 cout<<"按任意键结束!"<<endl; } char GetTop1(SqStack1 &S1)//取栈顶元素 { char e; if(S1.top==S1.base)cout<<"nttt 运算符栈已空!n"; else e=*(S1.top-1); return e; } float GetTop2(SqStack2 &S2)//取栈顶元素 { float e; if(S2.top==S2.base) cout<<"ntt 运算数栈已空!"; else e=*(S2.top-1); return e; }

char Compare(char m,char n)//运算符的优先级比较 { if(n=='+'||n=='-')//输入符号为"+"、"-" { if(m=='('||m=='#')return '<';//栈顶元素为"("、"#",此时栈 顶符号优先级低,返回"<" else return '>';//否则,栈顶符号优先级高,返回">" } else if(n=='*'||n=='/')//输入的符号为"*"、"/" { if(m==')'||m=='*'||m=='/')return '>';// 栈顶元素为 ")" 、 "*"、"/",此时栈顶符号优先级高,返回">" else return '<';//否则,栈顶符号优先级低,返回"<" } else if(n=='(')return'<';//输入的符号为"(",则直接返回"<" else if(n==')')//输入的符号为")" { if(m=='(')return'=';// 栈顶元素为 "(", 此时优先级同,返回 "=" else return '>';//否则,栈顶符号优先级高,返回">" } else { if(m=='#')return'=';// 栈顶元素为 "#", 此时优先级同,返回 "=" else return '>';//否则,栈顶符号优先级高,返回">" } } //输入符号为其他

1234

 


 

  【Top

最新搜索

 

数据结构课程设计报告-中缀算术表达式求值 - 课程设计报告 课程名称 课题名称 数据结构 中缀算术表达式求值 专班学姓 业级号名 通信工程 通信 0902 指导教师...

数据结构课设报告-算术表达式求值_学习总结_总结/汇报_实用文档。数据结构课程设计报告-算术表达式求值 课程设计报告 课程名称: 数据结构 题目名称: 算术表达式求值 ...

数据结构课程设计报告(二)表达式求值(计算器)_工学...个算术计算器,能运算包括四则运算、括号的表达式的...课设题目要求不仅 要求对课本知识有较深刻的了解,...

表达式求值实验报告 - 数据结构课程设计 淮海工学院... 年月日 数据结构课程设计报告 第 1 页,共 21 页 ...算术表达式求值.exe; 2、 进入程序后即显示提示信息:...

数据结构课程设计报告-表达式求值问题 - 《数据结构》 课程设计报告 题班姓 目: 表达式求值问题 学院(系) : 数学与计算科学学院 级: 11 级信息与计算科学 4 ...

数据结构课程设计-表达式求值 - 黄淮学院 “数据结构”课程设计 报告 系 (院) : 设计题目: 专业班级: 小组成员: 指导教师: 完成时间: 信息工程学院 表达式求值...

数据结构(C语言版)课程设计报告表达式求值 - 安徽理工大学 数据结构 课程设计说明书 题目: 表达式求值 院 系: 计算机科学与工程学院 计算机 12-1 班 2012303038...

数据结构算术表达式求值课程设计 - 目 1.前 录 言···...

数据结构 表达式求值(中缀)实验报告 - 江西理工大学软件学院 《数据结构》课程设计报告 2012—2013 学年第一学期 课程名称 设计题目 专业班级 姓学名号 数 据 ...

《数据结构 课程设计》表达式求值 实验报告 - 实验课程名称 专学学指业班级生姓名号导教师 20 至 20 学年第 学期第 至 周 1 算术表达式求值演...