《数据结构》课程设计报告-线性表进行算式计算、排课问题,JAVA语言,截图完整.doc
《《数据结构》课程设计报告-线性表进行算式计算、排课问题,JAVA语言,截图完整.doc》由会员分享,可在线阅读,更多相关《《数据结构》课程设计报告-线性表进行算式计算、排课问题,JAVA语言,截图完整.doc(48页珍藏版)》请在三一文库上搜索。
1、中南大学 数据结构课程设计报 告 指导教师 学 院 信息科学与工程学院 完成时间 2010 年 7 月 7 日 数据结构课程设计报告 计算机 0801 - 2 - 目目 录录 目目 录录.- 2 - 题目一:利用线性表进行算式计算题目一:利用线性表进行算式计算.- 1 - 一、实验名称:.- 1 - 二、需求分析:.- 1 - 三、概要设计.- 1 - 四、详细设计.- 3 - 五、调试分析.- 5 - 六、测试结果.- 5 - 七、课程设计总结.- 7 - 八、参考文献.- 8 - 九、附录.- 9 - 题目三:排课问题题目三:排课问题.- 21 - 一、实验名称:.- 21 - 二、需求分
2、析:.- 21 - 三、概要设计.- 21 - 四、详细设计.- 24 - 五、调试分析.- 33 - 六、测试结果.- 33 - 七、课程设计总结.- 34 - 八、参考文献.- 35 - 九、附录.- 35 - 数据结构课程设计报告 计算机 0801 - 1 - 题目一:利用线性表进行算式计算题目一:利用线性表进行算式计算 一、实验名称:一、实验名称: 利用线性表进行算式计算 二、需求分析:二、需求分析: 设计任务: 界面上出现一个文本框,输入一个算式,点击按钮,显示结果。该算式内 只含有数字、括号、+、-、*、/、%这几种字符,优先级为:括号-%-*,/- +,-。如输入:2+3*5,结
3、果为 17,输入(2+3)*5 结果为 25。输入格式有误,需 要给予提示。在算法中,必须实现对输入的算式字符串的分析,而不仅仅是得 到结果。 (1)输入的形式和输入值的范围:数字和运算符(只含有括号、+、-、*、/、%) 。 (2)输出的形式:以数字和运算符组成的算式形式输出。 (3)程序所能达到的功能:对输入数字和运算符进行分析,并输出分析结果。 (4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 三、概要设计三、概要设计 抽象数据类型的定义: ADT Stack 数据对象:D=ai|aiElemSet,i=1,2,n, n0 数据关系:R1=|ai-1,aiD,i=
4、1,2,n 基本操作: InitStack( double arrayN; NumStack; typedef struct int top; char arrayN; OpStack; 数据结构课程设计报告 计算机 0801 - 4 - /把字符转换为相应的整数的函数 int Cint(char mychar) return (mychar-48); /数字进栈的函数 status PushNum(NumStack numstack.arraynumstack.top-1=num; return OK; else return ERROR; /数字出栈的函数 status PopNum(Nu
5、mStack numstack.top-; return OK; else return ERROR; /操作符进栈的函数 status PushOp(OpStack opstack.arrayopstack.top-1=op; return OK; else return ERROR; 数据结构课程设计报告 计算机 0801 - 5 - /操作符出栈的函数 status PopOp(OpStack opstack.top-; return OK; else return ERROR; /进行运算的函数 double Calc(double a,double b,char c) double
6、result; 五、调试分析五、调试分析 1调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析 调试过程中,对于非法输入的测试很重要,对于一些不符合常规的输入进 行测试,并针对存在的问题对源代码进行修改,可以对于非法输入进行提示。 2算法的时间复杂性和可能的改进设想 此算法的运行时间主要花在 while 循环上,它从头到尾扫描后缀表达式中 的每一个数据(每个操作数或运算符均为一个数据) ,若后缀表达式由 n 个数据 组成,则此算法的时间复杂度为 O(n)。 在转换算法中,中缀算术表达式中的每个字符均需要扫描一遍,对于扫描 到的每个运算符,最多需要进行入栈、出栈和写入后缀表达式这三次操
7、作,对 于扫描到的数字或小数点,只需要把它直接写入到后缀表达式即可。所以,此 算法的时间复杂度为 O(n),n 为后缀表达式中字符的个数。 六、测试结果六、测试结果 1、输入:5+6*3%2 数据结构课程设计报告 计算机 0801 - 6 - 输出:5+6*3%2=11.0 2、输入:3+5*(8-2)%4 输出:3+5*(8-2)%4=13.0 3、输入:1*5+2 输出:对不起!表达式有错! 4、输入:123321123+456654456 输出:123321123+456654456=5.7997555E8 5、输入:1111 输出:1111=1111.0 6、输入:5(3+2) 输出:
8、对不起!表达式有错! 7、输入:5+9*3-8/4%2 输出:5+9*3-8/4%2= -Infinity 界面效果图 数据结构课程设计报告 计算机 0801 - 7 - 运行结果显示-1 运行结果显示-2 数据结构课程设计报告 计算机 0801 - 8 - 七、课程设计总结七、课程设计总结 通过本次数据结构课程设计,我有很多收获,在此,我将我的亲身感受回 顾和总结于下: 在上学期中学习了本专业的核心课程数据结构。什么是数据结构呢? 这是我们首先考虑到的问题:从字面上来看, “数据结构”分数据和结构两部分, 这就很容易联想到数据结构的本质是一种使数据结构化的知识。通过理论课程 的学习,使我初步
9、了解了数据结构的基本知识。数据结构是一门研究非数值计 算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。现 代程序设计已转型为讨论如何在最大程度上处理好数据之间的相互关系并提升 数据处理的效率。在这里,数据结构就发挥了重要的作用。数据结构可以说是 编程的灵魂,它不是一门语言。数据结构和程序设计语言本身没有任何联系, 唯一有的关系就是用程序语言去描述数据结构。现今我们所学习的数据结构课 程常用的描述语言主要有 C、C+和 JAVA 等。数据结构只是给我们提供处理常 规问题的一个思路而已,讲的是已经成熟的编程思想和算法,适用于所有开发 语言。所以说,组织好数据结构是写程序的第一步。
10、 数据结构是一门实践性较强的计算机基础课程,为了学好这门课程,必须 在掌握理论知识的同时,加强上机实践。课程设计的目的就是要达到理论与实 际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把 现实世界中的实际问题在计算机内部表示出来,同时强化对编程语言的使用, 培养基本的、良好的程序设计能力。 我于大二上学期从软件学院软件工程专业转到信息学院计算机专业,在 09 年暑假中,我参加了软件学院的 JAVA 实训,了解了一定的 JAVA 语言知识,因 为本次课程设计要制作界面,所以选择 JAVA 语言有它的优势。 通过这次课程设计,我体会到要做出一个好的程序是很难的,尽管我花了 一个
11、多星期去做这两个项目,但这个程序还是不够理想,只是达到一些基本的 水平而已,跟那些功能强大的程序还是有很大的距离。这个程序还有一些地方 值得完善的,比如算式计算中一些非法输入(如数字后面连续输入括号无法判 断非法并影响计算结果等) ,这些问题需要程序员考虑得更全面,使实现的功能 更完善,在今后不断改进。 数据结构课程设计报告 计算机 0801 - 9 - 在近两周的课程设计中,我认为最大的收获就是在遇到问题时解决问题的 过程。如对语言并不完全了解,如有些函数的操作需要通过查阅相关书籍和帮 助来了解,另外,在入栈、出栈的算法设计中,曾因为思路不清晰而在编代码 时遇到了困难,对于运算符和数字的分离
12、和判断也曾困扰过我。我通过查阅书 籍、上网搜索和向其他同学询问,才得以最终完成项目。 通过这次课程设计,我学到了很多,同时也认识到了自己的不足。学校的 课程不能将所有的知识都讲授给我们,所以要想学好一门课程,我们应该充分 利用课余时间多看专业相关的书籍,丰富自己的知识。同时,作为计算机专业 的学生,动手能力也是非常重要的,在掌握了理论知识后应多多上机实践。只 有多多实践,才能更好地学习好一门语言,更好地理解课程的内容。 八、参考文献八、参考文献 【1】 清华大学计算机系列教材数据结构(C C语言版)/严蔚敏,吴伟民编著 北京:清华大学出版社,2007.4 【2】 Java JDK 5.0 学习
13、笔记/良葛格编著北京:清华大学出版社, 2006.8 九、附录九、附录 package stack; public class CharStack CharNode top; int sum; public CharStack() top=new CharNode(); top.c=#; sum=0; public char pop() /不作有没有元素的判断,统一在出栈前进行判断,若没有元素, 则不调用此函数 char c=top.node.c; top.node=top.node.node; 数据结构课程设计报告 计算机 0801 - 10 - sum-; return c; public
14、 void push(char c) CharNode newNode=new CharNode(); newNode.c=c; newNode.node=top.node; top.node=newNode; sum+; class CharNode CharNode node; char c; public CharNode() node=null; c= ; package stack; public class CharStack CharNode top; int sum; public CharStack() top=new CharNode(); top.c=#; sum=0;
15、public char pop() /不作有没有元素的判断,统一在出栈前进行判断,若没有元素, 则不调用此函数 char c=top.node.c; top.node=top.node.node; sum-; return c; public void push(char c) CharNode newNode=new CharNode(); 数据结构课程设计报告 计算机 0801 - 11 - newNode.c=c; newNode.node=top.node; top.node=newNode; sum+; class CharNode CharNode node; char c; pu
16、blic CharNode() node=null; c= ; package stack; import java.awt.GridBagConstraints; import java.awt.Insets; /* * GBCGridBagLayout * * author ibm * */ public class GBC extends GridBagConstraints /* * () * param x * param y */ public GBC(int x, int y) this.gridx = x; this.gridy = y; 数据结构课程设计报告 计算机 0801
17、 - 12 - public GBC(int gridx, int gridy, int gridwidth, int gridheight) this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight; public GBC setAnchor(int anchor) this.anchor = anchor; return this; /* * 仯 * param fill * return */ public GBC setFill(int fill) t
18、his.fill = fill; return this; /* * * param weightx * param weighy * return */ public GBC setWeight(double weightx, double weighty) this.weightx = weightx; this.weighty = weighty; return this; /* * * param distance * return */ public GBC setInset(int distance) 数据结构课程设计报告 计算机 0801 - 13 - this.insets =
19、 new Insets(distance, distance, distance, distance); return this; /* * * param distance * return */ public GBC setInset(int top, int left, int bottom, int right) this.insets = new Insets(top, left, bottom, right); return this; public GBC setIpad(int ipadx, int ipady) this.ipadx = ipadx; this.ipady =
20、 ipady; return this; public class GetPriority public int inSideStack(char c) int i=0; switch(c) case =: i=1;break; case ): i=1;break; case +: i=3;break; case -: i=3;break; case *: i=5;break; case /: i=5;break; case %: i=7;break; case : i=9;break; case (: i=1;break; return i; public int outSideStack(
21、char c) int i=0; switch(c) case =: i=0;break; case ): i=0;break; case +: i=2;break; 数据结构课程设计报告 计算机 0801 - 14 - case -: i=2;break; case *: i=4;break; case /: i=4;break; case %: i=6;break; case : i=8;break; case (: i=10;break; default : i=-1; /当遇到不可识别的运算符识,设其优先级为-1,以便在主程 序中能及时检查出错误 return i; package s
22、tack; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class MainClass extends JFrame private static final long serialVersionUID = 8669406311759888678L; MainClass mainClass; JTabbedPane tab; JTextField input, output;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 线性 进行 算式 计算 问题 JAVA 语言 截图 完整
链接地址:https://www.31doc.com/p-3259610.html