数据结构与算法课程设计报告格式(要求与模板)-2013级适用
- 格式:doc
- 大小:278.50 KB
- 文档页数:13
XX学院数据结构课程设计(论文)题目:散列表的设计与实现学生XX:X攀学号:4所在院(系):数学与计算机学院专业:网络工程班级:二班指导教师:蒋斌职称:副教授2017年6 月28 日XX学院教务处制附件2:XX学院本科学生课程设计任务书注:任务书由指导教师填写。
附件3:摘要信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。
散列表的设计与实现所涉及到的操作算法都是以链表或顺序表的基本运算作为基础的,此程序通过通讯录实现,包括建立通讯录,添加记录,查询记录,删除记录,显示记录,修改记录。
通过顺序表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。
关键字:新建通讯录,散列表,散列函数,处理冲突目录摘要V 1课程设计的目的和意义 1 2需求分析 22.1需求概述 22.2需求环境 22.3功能描述 2 3整体设计(方案设计) 33.1系统功能设计 33.2处理功能设计 33.3主要模块 53.4算法模块设计 53.4.1哈希算法 53.5二次探测再散列 6 4程序结构及源代码说明 64.1程序结构说明 64.1.1哈希函数 64.1.2冲突处理函数74.2程序源码及说明8 5程序测试及运行结果说明1 65.1主菜单运行界面1 65.2各项功能测试1 65.2.1用户信息录入1 65.2.2冲突解决175.2.3用户查找17 总结18 参考文献201 课程设计的目的和意义《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
数据结构课程设计报告课程设计报告课程设计题目:链表的创立、插入、删除、修改学生姓名专业计算机科学与技术班级学号指导教师艾9月 30日一、实验题目:实现链表的创立、插入、删除和修改任务:实现链表的创立、插入、删除、修改和输出要求:建立一个简单的人机对话,创立、插入、删除、修改和输出功能能够根据需要选择使用。
二、实验时间、地点:-12-26~ -12-30、信工楼302三、实验目的本次课程设计的主要目的是综合运用所学的数据结构知识解决一个比较实际问题,侧重对链表、数组、字符串、图、树等相关内容的综合应用,使同学们能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。
四、实验要求1. 了解数据结构及其分类、数据结构与算法的密切关系;2. 熟悉各种基本数据结构及其操作,学会根据实际问题来选择数据结构;3. 掌握设计算法的步骤和分析方法;4. 掌握数据结构在排序和查找等常见算法中的应用。
5. 独立完成;6.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;7.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;8.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)五、实现思路链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。
链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。
Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。
能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。
《数据结构》课程设计报告题目:班级:学号:姓名:xxxx年xx月xx日一、总体设计目标设计<<在这一节中,陈述设计所要实现的目标,包括设计题目、要实现的基本功能、要达到的指标要求。
在开始一个设计之前,应当首先对所要编写的程序将是什么样的、应当如何使用、可以达到什么效果有一个预期的设想。
只有对要做的事情有一个清楚的认识,对自己努力的目标有一个清楚的认识,所做的努力才是有意义的。
>>框架设计<<在这一节中,描述程序的设计框架,包括程序的结构描述、模块间的关系描述。
在开始动手写程序之前,先想好程序的组织结构,再逐块进行设计和编码。
好的程序框架,不仅可以使程序的思路更清晰,也可以使设计工作更有条理、编码更简洁、更易于理解和维护。
>>二、详细设计数据结构设计<<在这一节中,描述程序中所用到的主要数据结构,包括结构描述、结构的设计思路,即为什么采用这样的数据结构。
程序的数据结构是整个程序的核心所在,设计良好的数据结构,不仅可以准确地表达程序所要处理的数据对象,而且可以更有效地实现对数据的相关处理。
>>主要技术点及具体实现<<在这一节中,描述系统中所涉及到的主要的技术点,包括要解决的问题、所采用的解决方案和具体实现方法。
在一个设计中往往会可能存在一些有一定难度的要解决的问题,需要寻找和设计适当的方法,这些问题的解决通常是一个设计中的闪光点,也是设计者最有成就感的地方,把这些问题以及自己的解决方案写出来,最能够反映设计者工作中的与众不同之处和创造性。
>>三、测试测试计划<<在这一节中,描述如何对系统进行测试,包括测试方案的设计、测试数据的设计。
测试工作是程序设计中极为重要的一个环节,只有通过严格的测试,才能发现程序中可能隐藏的问题和错误,保证程序的正确和健壮。
制订测试计划和设计测试数据时,要考虑到测试的全面性和针对性。
第二题:电梯模拟1、需求分析:模拟某校九层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
乘客可随机地进出于任何层。
对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。
而题目的最终要求输出时:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
2、设计2.1设计思想:(1)数据结构设计本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:enum {up,down,stop,home}State(home);同时初始化最初状态为电梯在本垒层。
而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:typedef struct passage{int now;//乘客当前所在的位置int dis;//乘客的目地地int wait;//最长的等待的时间int waitnow;//已经等待的时间struct passage *next;}Passage;虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:typedef struct lift{int count_C;//计数电梯已到达的层数int count_A;//系统的总时间计数器记得必须初始化为0int flag_in[High];//九个楼层有无请求的标志哪个楼层如果有请求该标志置1int num;//等待队列中的人数记得要进行初始化为0int people;//电梯中人数int flag_out[High];}Lift;(2)算法设计顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。
《数据结构与算法》课程设计报告王婧、龚丹、宋毅编写题目:航空订票管理系统学期:秋班号:学号:姓名:成绩:哈尔滨华德学院电子与信息工程学院年月一、实训设计的目的与要求(注:正文为宋体,五号字,为单倍行距)(一)课程设计目的(不少于字).数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(语言),自行实现一个较为完整的应用系统。
.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
具体的有:()熟练掌握链表存储结构及其建立过程和常用操作;()熟练掌握队列的建立过程和常用操作;()学会自己调试程序的方法并掌握一定的技巧。
(二)题目要求(不少于字).每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级,或)以及等候替补的客户名单(包括姓名和所需数量)。
.系统能实现的操作和功能如下:()查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;()承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;()承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
二、实训环境配置系统三、设计正文.需求分析。
数据结构课程设计报告姓名:班级:学号:指导教师成绩:一.各个课设概述1.算术表达式求值(必做)A 算法思想及数据结构及时间复杂度(括号内容):算式(栈):计算部分(n):建立运算符优先规则,存在一个二维数组中。
运用数字栈和运算符栈,逐个字符读入算式,若字符为数字则放入数字栈;若字符为运算符则让它和元素符栈的栈顶元素比较优先级,若优先级低则进运算符栈,若优先级高,则取数字栈中元素进行运算。
直至读到#。
纠错部分(n):首先对每个读入的字符进行判断,如果非法则终止程序。
对于运算符匹配,则在计算完后查看字符栈和数字栈,进而判断。
B 程序测试正确表达式测试:#7+8+(9+6*5)+4#结果:OPTR:OPND:OPTR: #OPND:OPTR: #OPND: 7OPTR: + #OPND: 7OPTR: + #OPND: 8 7OPTR: #OPND: ?OPTR: + #OPND: ?OPTR: ( + #OPND: ?OPTR: ( + #OPND: 9 ?OPTR: + ( + # OPND: 9 ?OPTR: + ( + # OPND: 6 9 ?OPTR: * + ( + # OPND: 6 9 ?OPTR: * + ( + # OPND: 5 6 9 ?OPTR: + ( + # OPND: N 9 ?OPTR: ( + #OPND: W ?OPTR: + #OPND: W ?OPTR: #OPND: fOPTR: + #OPND: fOPTR: + #OPND: 4 fOPTR: #OPND: jresult: 58错误表达式测试#(7*5)(3+4)#输出结果:OPTR:OPND:OPTR: #OPND:OPTR: ( #OPND:OPTR: ( #OPND: 7OPTR: * ( #OPND: 7OPTR: * ( #OPND: 5 7OPTR: ( #OPND: SOPTR: #OPND: SOPTR: ( #OPND: SOPTR: ( #OPND: 3 SOPTR: + ( #OPND: 3 SOPTR: + ( #OPND: 4 3 SOPTR: ( #OPND: 7 SOPTR: #OPND: 7 S算式操作符搭配有问题,请重新输入。
《数据结构》课程设计报告设计题目航班信息的查询与检索专业电子信息工程班级姓名学号完成日期2010-6-28目录1. 问题描述………………………………………………页码2. 系统设计………………………………………………页码3. 数据结构与算法描述…………………………………页码4. 测试结果与分析………………………………………页码5. 总结…………………………………………………页码6. 参考文献………………………………………………页码附录程序源代码…………………………………………页码航班信息的查询与检索1. 问题描述:这学期,我们在余先伦老师的带领下,大致学习了一下《数据结构》,实现了简单的数据结构算法。
现在,我们将完成简单的数据结构课程设计。
在数据结构的学习中我们知道,排序和查找是在数据结构中使用频率非常高。
为了能够快速有效地进行查询与检索,我们需要对记录按关键字进行排列。
选择《航班信息查询与检索》这个课题,主要是因为当今时代的需求。
随着科技与经济的发展,当今乘飞机的人越来越多,这时,快速的了解各类航班的班次、时间、价格及机型的信息将备受关注。
在我开发的这个《航班信息查询与检索》这个系统中,航班号将成为关键字,而且是具有结构特点的一类关键字。
通过关键字的键入,你将获得你所需要的航班的全部信息。
2. 系统设计2.1 设计目标:通过一定的数据结构,实现对信息的查询与检索并按要求输出。
试设计一个航空客运定票系统。
[基本要求]每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
课程设计报告的内容设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料.设计报告以规定格式的电子文档书写,打印并装订,排版及图,表要清楚,工整.装订顺序如下:封面、目录、正文.正文包括以下7个内容:1.需求分析陈述说明程序设计的任务,强调的是程序要做什么,需要什么结果、所能达到的功能.2.概要设计说明本程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次(调用)关系.3.详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);可采用流程图、N S 图进行描述,画出函数和过程的调用关系图.4.调试分析内容包括:a.调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;b.算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;c.经验和体会等.5.测试结果列出你的测试结果,包括输入和输出.这里的测试数据应该完整和严格,最好多于需求分析中所列.6.参考文献列出参考的相关资料和书籍.封面格式如下:数据结构课程设计报告班级:_____ _____ _____ _________ 姓名:__________ __________ 指导教师:_______ ____________ 成绩:__________________________信息工程学院年月日目录1.需求分析 (2)2.概要设计 (2)3.详细设计 (2)4.调试分析 (2)5.测试结果 (2)参考文献 (6)附录……………………………………………………一、需求分析二、概要设计三、详细设计四、调试分析五、测试结果六、参考文献七、附录附录为程序代码!。
数据结构课程设计报告样例12020年4月19日《数据结构与算法》课程设计报告王婧、龚丹、宋毅编写题目:航空订票管理系统学期:秋班号:学号:姓名:成绩:哈尔滨华德学院电子与信息工程学院12月一、实训设计的目的与要求(注:正文为宋体,五号22020年4月19日字,为单倍行距)(一)课程设计目的(不少于100字)1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统。
2.经过课程设计,自己经过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
具体的有:(1)熟练掌握链表存储结构及其建立过程和常见操作;(2)熟练掌握队列的建立过程和常见操作;(3)学会自己调试程序的方法并掌握一定的技巧。
(二)题目要求(不少于100字)1.每条航线所涉及的信息有:终点站名、航班号、32020年4月19日飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名和所需数量)。
2.系统能实现的操作和功能如下:(1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;(3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足她的要求,则为她办理订票手续,否则依次询问其它排队候补的客户。
二、实训环境配置42020年4月19日Windows系统CodeBlocks三、设计正文1.需求分析本订票系统能够实现全部航线信息的浏览功能、订票客户信息的查询功能、单条航线查询功能、订票功能和退票功能。
数据结构课程设计报告模板[贪吃蛇程序设计]一、 设计课题贪吃蛇程序设计二、 设计内容1. 工作说明(1)实现贪吃蛇小游戏的运行,各功能模块分别为食物类型的定义,蛇类型的定义,界面光标位置的显示,蛇的初始化,计分方向 码的转换输出(2否(3) 所用到的数据结构的知识及相关数据结构的描述形式数据类型的表示及实现,算法和算法分析,线性表的链式表示和实现,数组的顺序表示,动态存储管理等。
(4) 函数介绍a 界面光标位置函数:控制界面光标位置,为显示边界、食物等界面显示内容提供依据。
b.方向控制函数:经过键盘输入指定字母实现对蛇移动方向的控制。
c.初始化蛇函数:经过链表方式显示蛇的形象,并控制蛇的初始长度、初始移动方向及初始分数。
d.e.计分显示函数:经过引用界面光标位置函数,实现在指定界面位置输出分数。
f.控制蛇的死亡函数:讨论当蛇碰到左右上下边界以及咬到自身等几种情况时,经过引用库函数清除当前屏幕,再经过界面光标位置函数在指定位置输出"Game Over!"、"Press ESC to exit,any other key to retry!",接着经过选择是否继续游戏,如果是,经过引用库函数中的跳跃函数,回到指定位置循环程序;如果否,则结束游戏。
g.食物输出函数:经过引用库函数中的随机数函数随机输出食物,并当蛇吃到食物时,控制蛇长度增长,同时使用递归函数循环输出食物。
h.游戏实现过程函数:调用以上函数,实现蛇的移动、增长、死亡的具体游戏实现过程。
(5) 函数的调用关系(1)调用了gotoxy()函数的有:boundary()函数,getscoresys ()函数,isdead()函数,play()函数。
(2)play()函数调用的函数有:gotoxy()函数,boundary()函数,getscoresys()函数,isdead()函数。
(3)主函数main()调用了play()函数。
1 “数据结构与算法课程设计”报告写作要求及示例 一、报告要求:
1. 各位同学要严格按照要求写报告,A4 纸打印,用学校统一印发的课程设计报告封面封装(报告封皮各班班长到学院办公室领取)。 2. 报告中不要求附全部的程序代码,但主要代码在详细设计中说明。 3. 报告上的课程设计名称和指导教师按照数据结构与算法课程设计计划书中指定的填写。 4. 报告字体及字号说明:中文使用宋体,西文使用Times New Roman。一级标题使用四号加黑,其它次级标题使用小四加黑,正文使用小四不加黑(注:不要附代码)。 5. 刻盘说明:统一刻录光盘保存文档和源码,每班一张(班长负责),卷标:数据结构与算法课程设计(**2012-*班),如:数据结构与算法课程设计(软件2012-1班)。根目录中每个同学一个文件夹,文件夹中保存源代码及报告电子文档,目录名为学号加姓名如:09083301-刘德华。 6. 报告提交:课程设计报告由各班长或学习委员收齐后,交给各班的课程设计指导教师。报告提交时间:3月24日(周一)。具体提交地点和方式,由各班指导教师确定。
二、报告格式 1.问题描述 题目内容、基本要求、提高要求。 2.需求分析 软件的基本功能、输入/输出形式、测试数据要求。 3.概要设计 抽象数据类型、主程序流程及模块调用关系。 4.详细设计 实现概要设计的数据类型、主程序以及其它模块的算法描述。 2
5.编码与调试分析 编码与调试过程中遇到的问题及解决的办法,还存在哪些没有解决的问题? 6.使用说明 简要说明程序运行操作步骤。 7.测试结果 8.自学知识 自主学习了哪些新知识及主要知识点描述 9.课程设计心得体会
三、示例 题目:计算表达式的值 1、问题描述 对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值。 基本要求:从键盘输入一个正确的中缀表达式,将中缀表达式转换为对应的后缀表达式,计算后缀表达式的值。 提高要求:(1)对于表达式中的简单错误,能够给出提示; (2)不仅提示错误,也能给出错误信息 (3)表达式中可以包括单个字母表示的变量 (4)能够处理多种操作符 (5)实现包含简单运算的计算器 (6)实现一个包含简单运算和函数运算的计算器。 2.需求分析 软件的基本功能:由键盘输入中缀表达式,程序可以将输入的中缀表达式转换成对应的后缀表达式,并计算后缀表达式的值。对于在输入时发生的简单错误,程序可以给出提示。本程序支持含负数、小数、多位数等多种操作数的处理,可以计算含加、减、乘、除、求余、求幂等多种运算符的表达式,并能判断表达式括号是否匹配。 输入/输出形式:用户可以通过控制台,根据输入提示。 3
输入形式: ①正确的不含字母变量的中缀表达式; ②含有简单错误的中缀表达式。 输出形式: ①对于正确的中缀表达式,可以输出其转化后的后缀表达式及表达式的计算结果; ②对于含有简单错误的中缀表达式,程序将自动输出错误提示,并给出错误信息。 测试数据要求:用户可以输入一个符合要求的中缀表达式,也可以输入一个包含简单错误的表达式。表达式中可以包括各种类型的常数以及负数等,操作符包括(+、-、*、/、%、^)等,同时表达式还可以包括各种括号。 3.概要设计 (1)抽象数据类型: 根据题目的要求,考虑用栈类型比较适合。 ADT SeqStack Data 栈中元素具有相同类型及后进先出特性,相邻元素具有前驱和后继关系 Operation SeqStack 前置条件:栈不存在 输入:无 功能:栈的初始化 输出:无 后置条件:构造一个空栈 ~ SeqStack 前置条件:栈已存在 输入:无 功能:销毁栈 输出:无 4
后置条件:释放栈所占用的存储空间 Push 前置条件:栈已存在
输入:元素值x 功能:在栈顶插入一个元素x 输出:如果插入不成功,抛出异常 后置条件:如果插入成功,栈顶增加了一个元素 Pop 前置条件:栈已存在 输入:无 功能:删除栈顶元素 输出:如果删除成功,返回被删元素值,否则,抛出异常 后置条件:如果删除成功,栈顶减少了一个元素 GetTop
前置条件:栈已存在 输入:无 功能:读取当前的栈顶元素 输出:若栈不空,返回当前的栈顶元素值 后置条件:栈不变 Empty 前置条件:栈已存在 输入:无 功能:判断栈是否为空 输出:如果栈为空,返回1;否则,返回0 后置条件:栈不变 End ADT (2)主程序流程: 5
(3)模块调用关系: 本程序中函数包括:main函数,栈操作相关函数,Translate函数,Value函数,Calculate函数,OpPriority函数,Match函数(这里要求对每个函数的功能做简单介绍) 其函数调用关系如下: 6
mainMatchTranslateValueCalculateOpPriority 4.详细设计 (1)实现概要设计的数据类型: 采用顺序栈 const int StackSize = 50; template //定义模板类SeqStack class SeqStack { public: SeqStack(); //构造函数,栈的初始化 ~SeqStack(); //析构函数 void Push(T x); //将元素x入栈 T Pop(); //将栈顶元素弹出 T GetTop(); //取栈顶元素(并不删除) bool Empty(); //判断栈是否为空 private: T data[StackSize]; //存放栈元素的数组 int top; //栈顶元素 }; (2)主程序以及其它模块的算法描述: 主函数具体代码: int main () 7
{ char op; Mune(); //调用菜单函数 cin >> op; //输入选择字符 getchar(); // "吃掉"回车,不然getline输入会有错,甚至导致系统崩溃。 cout << endl; while (op != 'E') //当不选择退出操作时循环 { Execute(); //执行函数,执行程序的主要功能 cin >> op; getchar(); cout << endl; } return 0; }
这个函数主要调用了实现功能的各个函数。其步骤为:在用户没有选择退出时,先调用输入函数,输入中缀表达式;然后调用判断表达式,如果中缀表达式错误,则根据返回的值来输出错误提示,不再往下运算;如果中缀表达式正确,则将中缀表达式转换为后缀表达式,然后输出中缀表达式和转换后的后缀表达式;接着,再调用计算函数,计算后缀表达式的结果输出。最后是清屏函数。直至用户选择退出。 (3)其它模块的算法描述 表达式转换函数 功能:将中缀表达式转换为后缀表达式,其中infix是输入的中缀表达式, postfix是转换后的后缀表达式。输入中缀表达式返回后缀表达式。 template char *SeqStack::Translate(char infix[],char postfix[]) { SeqStack cstk; (这里不写代码,但要把代码的核心算法描述清楚) 8
计算后缀表达式的值 功能:由后缀表达式计算表达式的值,返回计算结果 template void SeqStack::Value(char postfix[]) { SeqStack dstk; dstk.Push('#'); //将#压栈判断表达式结束 int j = 0; double a, b, result = 0; //左右操作数和计算结果 (这里不写代码,但要把代码的核心算法描述清楚) ......
其它函数的详细描述, 算法的效率与特点也在此描述 5、编码与调试分析 编码与调试过程中遇到的问题及解决办法: 【问题一】程序无法计算负数。 解决办法:分析得知,出现负数有两种情况:一是在表达式首端直接出现负数,则将全部字符后移一位,在字符数组首插入‘-’;二是在表达式中‘(’后面跟着负数,则将‘(’后出现的字符都向后移动一位,在‘(’后插入一个‘0’,再进行计算。 解决此问题的核心代码: int n1 = strlen(infix); if(infix[0] == '-') //处理首字符是'-'的情况,在'-'前添加一个'0' { for(i = n1; i >= 0; i--) infix[i+1] = infix[i]; infix[0] = '0';
}