欢迎来到天天文库
浏览记录
ID:47659160
大小:547.49 KB
页数:25页
时间:2019-10-18
《数据结构课程设计报告_IP数据包的捕获与分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、中南大学数据结构课程设计报告题目数据结构课程设计学生姓名莖成指导教师杨遂学院信息科学与工程学院专业班级计算机科学与技术1304班二O—五年九月目录1•需求分析31.1问题描述31.2基本要求32.总体设计32.1数据结构32.2模块间调用关系32.3各模块设计42.3.1判读运算符优先级模块42.3.2表达式转换模块42.3.3表达式求值模块63.详细设计74.调试与测试95.测试结果106.课程设计心得体会12参考文献13附录13目录1•需求分析31.1问题描述31.2基本要求32.总体设计32.1数据结构32.2模块间调用关系32.3各模块设计42.3.1判读运算符优先级模块
2、42.3.2表达式转换模块42.3.3表达式求值模块63.详细设计74.调试与测试95.测试结果106.课程设计心得体会12参考文献13附录131.需求分析1.1问题描述表达式求值是实现程序设计语言的基本问题之一,也是栈的应用的一个典型,设计程序演示用算符优先法对算术表达式求值的过程。1.2基本要求(1)以字符序列的形式从终端上输入语法正确的、不含变量的表达式。实现对算术四则运算表达式,对任意算术表达式的加法、减法、除法以及乘法求值。(2)运算数包括整数和小数处理。(3)演示在求值屮运算符栈、运算数栈、输入字符和主要操作的变化过程。(4)计算器的功能仿真。2.总体设计2.1数据结
3、构使用两个数组si,s2分别保存输入的中缀表达式和转换后的后缀表达式。通过使用char类型栈和double类型栈分别对运算符和操作数执行相应的操作,该栈山VC编译器支持,声明如stacksc;//声明栈sc,对运算符操作stacksf;//声明栈sf,对操作数操作2.2模块间调用关系1.3各模块设计2.3.1判读运算符优先级模块该模块的功能是判断备种运算符的优先级别,参数是字符型变Mop,返回类型为整型,优先级越高的运算符返回的整型数据越大。2.3.2表达式转换模块特殊字符’#'压人字符栈SC,用以判断是否结束表达式的转换。逐个取出数组S1中的元素,如
4、果是空格字符则不作任何处理;如果是'(’则入栈SC;如果是'),则依次将栈顶元素放入数组S2并出栈,直到栈顶元素为'(’,再执行一次出栈;如果是运算符则判断其与当前栈顶元素优先级高低,如果较低则将栈顶元索写入数组s2屮,直到优先级较高然后将其入栈;如呆是数字或者小数点,则直接写入到数组s2末尾,直到遇到字符串结束符' ,。将栈sc中剩余元素写入数组s2末尾并出栈,直到特殊字符结束表达式的转换。经过以上步骤,保存在si中的中缀表达式转换成后缀表达式并保存在s2数组中,可以用后缀表达式求值模块计算原表达式的值。2.3.3表达式求值模块定义双精度类型变量保存操作数的整数和小数部分,逐
5、个字符扫描s2屮的后缀表达式,如果是空格则不执行任何操作;如果是运算符则从栈sf屮取出操作数并执行相应的运算并把运算结果压入操作数栈sf;如果是数字或者小数点则通过相应的方法计算出操作数并压入操作数栈sf中直到遇到字符串结束符飞0,,此刻操作数栈中应该只有一个元素,此元素即为表达式的值。CaseY▼取两个操作数执行加法运算▼取两个操作数执行减法运算取两个操作数执行减法运算Sf.push(x);i++;While(str[i]!=,O,)▼CasewSwitch(ch)YCase取一个操作数执行取负运算▼取两个操作数执行乘法运算▼Default:Case:' '取两个操作数执行
6、除法运算取两个操作数执行乘方运算把数据由字符型转换为相应的数完成对表达式的计算while循环结束结朿1.详细设计charD_sc_pop();//返回栈顶元素(运算符)并执行一次出栈操作由于在实现表达式求值时耍执行多次取栈顶元素并出栈操作,在每次出栈Z前都需要检验栈当前是否为空,而R取栈顶和出栈操作也要分步实现,这样会产生很多冗余代码,木函数把这些操作封装在一个函数屮,调用该函数即可实现从运算符栈出栈并返回栈顶元素,使代码看起來更简洁,紧凑。具体实现细节如2charD_sc_pop(){if(!sc.empty())//执行出栈操作前判断栈是否为空!a=sc.top();//取栈
7、顶元素,并保存在变量a中cout«〃出栈运算符:z,«a«endl;sc.pop();//对运算符栈执行一次出栈操作}else!cout<
此文档下载收益归作者所有