ImageVerifierCode 换一换
格式:DOCX , 页数:60 ,大小:144.51KB ,
资源ID:10945959      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10945959.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学数据结构课程设计排课问题表达式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中南大学数据结构课程设计排课问题表达式.docx

1、中南大学数据结构课程设计排课问题表达式中南大学数据结构课程设计报告学生姓名 学 号 指导教师 学 院 专业班级 完成时间 题目一:利用线性表进行算式计算一、实验名称:利用线性表进行算式计算二、需求分析:设计任务:界面上出现一个文本框,输入一个算式,点击按钮,显示结果。该算式内只含有数字、括号、+、-、*、/、%这几种字符,优先级为:括号-%-*,/-+,-。如输入:2+3*5,结果为17,输入(2+3)*5结果为25。输入格式有误,需要给予提示。在算法中,必须实现对输入的算式字符串的分析,而不仅仅是得到结果。(1)输入的形式和输入值的范围:数字和运算符(只含有括号、+、-、*、/、%)。(2)

2、输出的形式:以数字和运算符组成的算式形式输出。(3)程序所能达到的功能:对输入数字和运算符进行分析,并输出分析结果。(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。三、概要设计抽象数据类型的定义:ADT Stack 数据对象:D=ai|aiElemSet,i=1,2,n, n0数据关系:R1=|ai-1,aiD,i=1,2,n基本操作: InitStack(&S); 初始化栈S,构造一个空栈 StackEmpty(S); 初始条件:栈S已存在操作结果:若栈为空栈,则返回true,否则返回false StackLength(S);初始条件:栈S已存在操作结果:返回S的元素

3、个数,即栈的长度GetTop(S,&e)初始条件:栈S已存在且非空操作结果:用e返回S的栈顶元素Push(&S,e)初始条件:栈S已存在操作结果:插入元素e为新的栈顶元素Pop(&S,&e)初始条件:栈S已存在且非空操作结果:删除S的栈顶元素,并用e返回其值主程序的流程:定义链栈,判断运算符优先级,实现具体计算,错误处理。四、详细设计主要算法:(伪代码)#define N 50#define OK 1#define ERROR 0#include #include typedef structint top;double arrayN;NumStack;typedef structint to

4、p;char arrayN;OpStack;/把字符转换为相应的整数的函数int Cint(char mychar)return (mychar-48);/数字进栈的函数status PushNum(NumStack &numstack,double num)if(numstack.topN) numstack.top+;numstack.arraynumstack.top-1=num;return OK;else return ERROR;/数字出栈的函数status PopNum(NumStack &numstack,double &num)if(numstack.top)num=nums

5、tack.arraynumstack.top-1;numstack.top-;return OK;else return ERROR;/操作符进栈的函数status PushOp(OpStack &opstack,char &op)if(opstack.topN) opstack.top+;opstack.arrayopstack.top-1=op;return OK;else return ERROR;/操作符出栈的函数status PopOp(OpStack &opstack,char &op)if(opstack.top) op=opstack.arrayopstack.top-1;op

6、stack.top-;return OK;else return ERROR;/进行运算的函数double Calc(double a,double b,char c)double result;五、调试分析1调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析调试过程中,对于非法输入的测试很重要,对于一些不符合常规的输入进行测试,并针对存在的问题对源代码进行修改,可以对于非法输入进行提示。2算法的时间复杂性和可能的改进设想此算法的运行时间主要花在while循环上,它从头到尾扫描后缀表达式中的每一个数据(每个操作数或运算符均为一个数据),若后缀表达式由n个数据组成,则此算法的时间复杂度

7、为O(n)。在转换算法中,中缀算术表达式中的每个字符均需要扫描一遍,对于扫描到的每个运算符,最多需要进行入栈、出栈和写入后缀表达式这三次操作,对于扫描到的数字或小数点,只需要把它直接写入到后缀表达式即可。所以,此算法的时间复杂度为O(n),n为后缀表达式中字符的个数。六、测试结果 1、输入:5+6*3%2输出:5+6*3%2=11.02、输入:3+5*(8-2)%4输出:3+5*(8-2)%4=13.03、输入:1*5+2 输出:对不起!表达式有错!4、输入:123321123+456654456 输出:123321123+456654456=5.7997555E85、输入:1111 输出:1

8、111=1111.06、输入:5(3+2) 输出:对不起!表达式有错!7、输入:5+9*3-8/4%2 输出:5+9*3-8/4%2= -Infinity 界面效果图运行结果显示-1 运行结果显示-2七、课程设计总结通过本次数据结构课程设计,我有很多收获,在此,我将我的亲身感受回顾和总结于下:在上学期中学习了本专业的核心课程数据结构。什么是数据结构呢?这是我们首先考虑到的问题:从字面上来看,“数据结构”分数据和结构两部分,这就很容易联想到数据结构的本质是一种使数据结构化的知识。通过理论课程的学习,使我初步了解了数据结构的基本知识。数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及

9、它们之间的关系和操作的学科。现代程序设计已转型为讨论如何在最大程度上处理好数据之间的相互关系并提升数据处理的效率。在这里,数据结构就发挥了重要的作用。数据结构可以说是编程的灵魂,它不是一门语言。数据结构和程序设计语言本身没有任何联系,唯一有的关系就是用程序语言去描述数据结构。现今我们所学习的数据结构课程常用的描述语言主要有C、C+和JAVA等。数据结构只是给我们提供处理常规问题的一个思路而已,讲的是已经成熟的编程思想和算法,适用于所有开发语言。所以说,组织好数据结构是写程序的第一步。数据结构是一门实践性较强的计算机基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。课程设计的目

10、的就是要达到理论与实际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,同时强化对编程语言的使用,培养基本的、良好的程序设计能力。我于大二上学期从软件学院软件工程专业转到信息学院计算机专业,在09年暑假中,我参加了软件学院的JAVA实训,了解了一定的JAVA语言知识,因为本次课程设计要制作界面,所以选择JAVA语言有它的优势。通过这次课程设计,我体会到要做出一个好的程序是很难的,尽管我花了一个多星期去做这两个项目,但这个程序还是不够理想,只是达到一些基本的水平而已,跟那些功能强大的程序还是有很大的距离。这个程序还有一些地方值得完善的,比

11、如算式计算中一些非法输入(如数字后面连续输入括号无法判断非法并影响计算结果等),这些问题需要程序员考虑得更全面,使实现的功能更完善,在今后不断改进。在近两周的课程设计中,我认为最大的收获就是在遇到问题时解决问题的过程。如对语言并不完全了解,如有些函数的操作需要通过查阅相关书籍和帮助来了解,另外,在入栈、出栈的算法设计中,曾因为思路不清晰而在编代码时遇到了困难,对于运算符和数字的分离和判断也曾困扰过我。我通过查阅书籍、上网搜索和向其他同学询问,才得以最终完成项目。通过这次课程设计,我学到了很多,同时也认识到了自己的不足。学校的课程不能将所有的知识都讲授给我们,所以要想学好一门课程,我们应该充分利

12、用课余时间多看专业相关的书籍,丰富自己的知识。同时,作为计算机专业的学生,动手能力也是非常重要的,在掌握了理论知识后应多多上机实践。只有多多实践,才能更好地学习好一门语言,更好地理解课程的内容。八、参考文献【1】 清华大学计算机系列教材数据结构(C语言版)/严蔚敏,吴伟民编著 北京:清华大学出版社,2007.4【2】 Java JDK 5.0学习笔记/良葛格编著北京:清华大学出版社,2006.8 九、附录package stack;public class CharStack CharNode top; int sum; public CharStack() top=new CharNode(

13、); top.c=#; sum=0; 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(); newNode.c=c; newNode.node=top.node; top.node=newNode; sum+; class CharNode CharNode node; char c; public Char

14、Node() node=null; c= ; 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; sum-; return c; public void push(char c) CharNode newNode=new Ch

15、arNode(); newNode.c=c; newNode.node=top.node; top.node=newNode; sum+; class CharNode CharNode node; char c; public CharNode() node=null; c= ; package stack;import java.awt.GridBagConstraints;import java.awt.Insets;/* * GBCGridBagLayout * * author ibm * */public class GBC extends GridBagConstraints /

16、* * () * param x * param y */ public GBC(int x, int y) this.gridx = x; this.gridy = y; 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 = anch

17、or; return this; /* * 仯 * param fill * return */ public GBC setFill(int fill) this.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 * retur

18、n */ public GBC setInset(int distance) this.insets = 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(in

19、t ipadx, int ipady) this.ipadx = ipadx; this.ipady = 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; c

20、ase (: i=1;break; return i; public int outSideStack(char c) int i=0; switch(c) case =: i=0;break; case ): i=0;break; case +: i=2;break; 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,以便在主程序中能及时检

21、查出错误 return i; package stack;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; JTextFi

22、eld input, output; JButton btnWork; private JTextArea txtaDisplay; private JTextArea txtaInput; private JLabel lblDisplay; private JLabel lblInput; private JButton btnProcess; private JPanel pnlNorth; private JPanel pnlSouth; private JPanel pnl; private JScrollPane scrDisplayPnl; private JScrollPane

23、 scrInputPnl; public static void main(String args) new MainClass().init(); public void init() try UIManager.setLookAndFeel(com.nilo.plaf.nimrod.NimRODLookAndFeel); catch (Exception e) try UIManager.setLookAndFeel(UIManager .getSystemLookAndFeelClassName(); catch (Exception e1) mainClass = new MainCl

24、ass(); this.setTitle(数据结构); this.setSize(500, 400); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.add(this.getJTabbedPane(), BorderLayout.CENTER); this.setVisible(true); public JTabbedPane getJTabbedPane() tab = new JTabbedPane(); tab.addTab(线性表, getFirstPanel(

25、); tab.addTab(Huffman, new JPanel(); return tab; public JPanel getFirstPanel() JPanel panel = new JPanel(); panel.setLayout(new BorderLayout(); txtaDisplay = new JTextArea(8, 10); txtaDisplay.setEditable(false); txtaInput = new JTextArea(8, 15); scrDisplayPnl = new JScrollPane(txtaDisplay); scrInput

26、Pnl = new JScrollPane(txtaInput); lblDisplay = new JLabel(分析结果); lblInput = new JLabel(输入表达式:); btnProcess = new JButton(分析); pnlNorth = new JPanel(); pnlSouth = new JPanel(); pnl = new JPanel(); pnlNorth.setLayout(new BorderLayout(); pnlSouth.setLayout(new BorderLayout(); / 组件控制 pnlNorth.add(lblDis

27、play, BorderLayout.NORTH); pnlNorth.add(scrDisplayPnl, BorderLayout.CENTER); pnlSouth.add(lblInput, BorderLayout.NORTH); pnlSouth.add(scrInputPnl, BorderLayout.CENTER); pnl.add(btnProcess); panel.add(pnlNorth, BorderLayout.NORTH); panel.add(pnlSouth, BorderLayout.CENTER); panel.add(pnl, BorderLayout

28、.SOUTH); btnProcess.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String source = txtaInput.getText().trim(); txtaInput.setText(); txtaDisplay.setText(calculate(source); ); return panel; public String calculate(String inputStr) String result; CharStack charStack = new CharStack(); NumStack numStack = new NumStack(); GetPriority priority = new GetPriorit

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1