版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学 数据结构课程设计报 告 指导教师 学 院 信息科学与工程学院 完成时间 2010 年 7 月 7 日 目目 录录 目目 录录.- 2 - 题目一:利用线性表进行算式计算题目一:利用线性表进行算式计算.- 1 - 一、实验名称:.- 1 - 二、需求分析:.- 1 - 三、概要设计.- 1 - 四、详细设计.- 3 - 五、调试分析.- 5 - 六、测试结果.- 5 - 七、课程设计总结.- 7 - 八、参考文献.- 8 - 九、附录.- 9 - 题目三:排课问题题目三:排课问题.- 21 - 一、实验名称:.- 21 - 二、需求分析:.- 21 - 三、概要设计.- 21 - 四、
2、详细设计.- 24 - 五、调试分析.- 33 - 六、测试结果.- 33 - 七、课程设计总结.- 34 - 八、参考文献.- 35 - 九、附录.- 35 - 题目一:利用线性表进行算式计算题目一:利用线性表进行算式计算 一、实验名称:一、实验名称: 利用线性表进行算式计算 二、需求分析:二、需求分析: 设计任务: 界面上出现一个文本框,输入一个算式,点击按钮,显示结果。该算式内 只含有数字、括号、+、-、*、/、%这几种字符,优先级为:括号-%-*,/- +,-。如输入:2+3*5,结果为 17,输入(2+3)*5 结果为 25。输入格式有误,需 要给予提示。在算法中,必须实现对输入的算
3、式字符串的分析,而不仅仅是得 到结果。 (1)输入的形式和输入值的范围:数字和运算符(只含有括号、+、-、*、/、%) 。 (2)输出的形式:以数字和运算符组成的算式形式输出。 (3)程序所能达到的功能:对输入数字和运算符进行分析,并输出分析结果。 (4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 三、概要设计三、概要设计 抽象数据类型的定义: adt stack 数据对象:d=ai|aielemset,i=1,2,n, n0 数据关系:r1=|ai-1,aid,i=1,2,n 基本操作: initstack( double arrayn; numstack; type
4、def struct int top; char arrayn; opstack; /把字符转换为相应的整数的函数 int cint(char mychar) return (mychar-48); /数字进栈的函数 status pushnum(numstack numstack.arraynumstack.top-1=num; return ok; else return error; /数字出栈的函数 status popnum(numstack numstack.top-; return ok; else return error; /操作符进栈的函数 status pushop(op
5、stack opstack.arrayopstack.top-1=op; return ok; else return error; /操作符出栈的函数 status popop(opstack opstack.top-; return ok; else return error; /进行运算的函数 double calc(double a,double b,char c) double result; 五、调试分析五、调试分析 1调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析 调试过程中,对于非法输入的测试很重要,对于一些不符合常规的输入进 行测试,并针对存在的问题对源代码进行
6、修改,可以对于非法输入进行提示。 2算法的时间复杂性和可能的改进设想 此算法的运行时间主要花在 while 循环上,它从头到尾扫描后缀表达式中 的每一个数据(每个操作数或运算符均为一个数据) ,若后缀表达式由 n 个数据 组成,则此算法的时间复杂度为 o(n)。 在转换算法中,中缀算术表达式中的每个字符均需要扫描一遍,对于扫描 到的每个运算符,最多需要进行入栈、出栈和写入后缀表达式这三次操作,对 于扫描到的数字或小数点,只需要把它直接写入到后缀表达式即可。所以,此 算法的时间复杂度为 o(n),n 为后缀表达式中字符的个数。 六、测试结果六、测试结果 1、输入:5+6*3%2 输出:5+6*3
7、%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) 输出:对不起!表达式有错! 7、输入:5+9*3-8/4%2 输出:5+9*3-8/4%2= -infinity 界面效果图 运行结果显示-1 运行结果显示-2 七、课程设计总结七、课程设计总结 通过本次数据结构课程设计,我有很多收获,在此,我将我的亲身感受回 顾和
8、总结于下: 在上学期中学习了本专业的核心课程数据结构。什么是数据结构呢? 这是我们首先考虑到的问题:从字面上来看, “数据结构”分数据和结构两部分, 这就很容易联想到数据结构的本质是一种使数据结构化的知识。通过理论课程 的学习,使我初步了解了数据结构的基本知识。数据结构是一门研究非数值计 算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。现 代程序设计已转型为讨论如何在最大程度上处理好数据之间的相互关系并提升 数据处理的效率。在这里,数据结构就发挥了重要的作用。数据结构可以说是 编程的灵魂,它不是一门语言。数据结构和程序设计语言本身没有任何联系, 唯一有的关系就是用程序语言去描
9、述数据结构。现今我们所学习的数据结构课 程常用的描述语言主要有 c、c+和 java 等。数据结构只是给我们提供处理常 规问题的一个思路而已,讲的是已经成熟的编程思想和算法,适用于所有开发 语言。所以说,组织好数据结构是写程序的第一步。 数据结构是一门实践性较强的计算机基础课程,为了学好这门课程,必须 在掌握理论知识的同时,加强上机实践。课程设计的目的就是要达到理论与实 际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把 现实世界中的实际问题在计算机内部表示出来,同时强化对编程语言的使用, 培养基本的、良好的程序设计能力。 我于大二上学期从软件学院软件工程专业转到信息学院计算
10、机专业,在 09 年暑假中,我参加了软件学院的 java 实训,了解了一定的 java 语言知识,因 为本次课程设计要制作界面,所以选择 java 语言有它的优势。 通过这次课程设计,我体会到要做出一个好的程序是很难的,尽管我花了 一个多星期去做这两个项目,但这个程序还是不够理想,只是达到一些基本的 水平而已,跟那些功能强大的程序还是有很大的距离。这个程序还有一些地方 值得完善的,比如算式计算中一些非法输入(如数字后面连续输入括号无法判 断非法并影响计算结果等) ,这些问题需要程序员考虑得更全面,使实现的功能 更完善,在今后不断改进。 在近两周的课程设计中,我认为最大的收获就是在遇到问题时解决
11、问题的 过程。如对语言并不完全了解,如有些函数的操作需要通过查阅相关书籍和帮 助来了解,另外,在入栈、出栈的算法设计中,曾因为思路不清晰而在编代码 时遇到了困难,对于运算符和数字的分离和判断也曾困扰过我。我通过查阅书 籍、上网搜索和向其他同学询问,才得以最终完成项目。 通过这次课程设计,我学到了很多,同时也认识到了自己的不足。学校的 课程不能将所有的知识都讲授给我们,所以要想学好一门课程,我们应该充分 利用课余时间多看专业相关的书籍,丰富自己的知识。同时,作为计算机专业 的学生,动手能力也是非常重要的,在掌握了理论知识后应多多上机实践。只 有多多实践,才能更好地学习好一门语言,更好地理解课程的
12、内容。 八、参考文献八、参考文献 【1】 清华大学计算机系列教材数据结构(c c语言版)/严蔚敏,吴伟民编著 北京:清华大学出版社,2007.4 【2】 java jdk 5.0 学习笔记/良葛格编著北京:清华大学出版社, 2006.8 九、附录九、附录 package stack; public class charstack charnode top; int sum; public charstack() top=new charnode(); top.c=#; sum=0; public char pop() /不作有没有元素的判断,统一在出栈前进行判断,若没有元素, 则不调用此函数
13、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 charnode() node=null; c= ; package stack; public class charstack charnode top;
14、 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 charnode(); newnode.c=c; newnode.node=top.node; top.node=newnode; sum+; cl
15、ass 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 /* * () * param x * param y */ public gbc(int x, int y) this.gridx =
16、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 = anchor; return this; /* * 仯 * param fill * return */ public gbc setfill(
17、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 * return */ public gbc setinset(int distance) this.insets = new insets(dist
18、ance, 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 = ipady; return t
19、his; 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(char c) int i=0;
20、 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,以便在主程 序中能及时检查出错误 return i; package stack; import java.awt.borderlayout; import
21、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; jbutton btnwork; private jtextarea txtadisp
22、lay; 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 scrinputpnl; public static void main(string args) new maincla
23、ss().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 mainclass(); this.settitle(数据结构); this.setsize(500, 400); this.setlo
24、cationrelativeto(null); this.setdefaultcloseoperation(exit_on_close); this.add(this.getjtabbedpane(), borderlayout.center); this.setvisible(true); public jtabbedpane getjtabbedpane() tab = new jtabbedpane(); tab.addtab(线性表, getfirstpanel(); tab.addtab(huffman, new jpanel(); return tab; public jpanel
25、 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); scrinputpnl = new jscrollpane(txtainput); lbldisplay = new jlabel(分析结果
26、); 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(lbldisplay, borderlayout.north); pnlnorth.add(scrdisplaypnl, borderl
27、ayout.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.south); btnprocess.addactionlistener(new actionlistener() pub
28、lic 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(); getprior
29、ity priority = new getpriority(); / getpriority priority=new getpriority(); operationclass operationfunction = new operationclass(); string str = inputstr + =; / 输入一个正确的表达式 char chararray = str.tochararray(); float a = 0f; boolean f = false; boolean d = false; boolean judgechar = true; boolean rku =
30、 false; int lku = 0; int l = 0; char chinstack; / 这个字符变量在下面代码中充当存储从运算符栈中出栈的运算 符 for (int i = 0; i i + 1) judgechar = false; break; if (mainclass.judge(chararrayi) if (d = true) float k = (float) (chararrayi - 0); for (int j = 0; j = 0 if (t) return true; else return false; package stack; public clas
31、s numstack intnode top; public numstack() top=new intnode(); public float pop() /出栈 /对于头结点,存整数类型的a属性存的是栈内的元素个数 /对于出栈操作,由于本函数返回值为整数,故不进行判断是否栈内还有元素, /而是在调用此函数前,通过top.a的值进行判断 float t=top.node.a; top.node=top.node.node; top.a-; return t; public void push(float a) /进栈 intnode newnode=new intnode(); newno
32、de.a=a; newnode.node=top.node; top.node=newnode; top.a+; class intnode intnode node; float a; public intnode() node=null; a=0f; package stack; public class operationclass /从numstack栈中依次取出两个数字进行相应运算符的操作,结果再压入numstack栈 中 public boolean operation(char chinstack,numstack numstack,charstack charstack) fl
33、oat a; float b; switch(chinstack) case +: if(numstack.top.a=2)a=numstack.pop();b=numstack.pop();numstack.push(a+b);return true;elsereturn false; case -: if(numstack.top.a=2)a=numstack.pop();b=numstack.pop();numstack.push(b-a);return true;elsereturn false; case *: if(numstack.top.a=2)a=numstack.pop()
34、;b=numstack.pop();numstack.push(a*b);return true;elsereturn false; case /: if(numstack.top.a=2)a=numstack.pop();b=numstack.pop();numstack.push(b/a);return true;elsereturn false; case %: if(numstack.top.a=2)a=numstack.pop();b=numstack.pop();numstack.push(b%a);return true;elsereturn false; case : if(n
35、umstack.top.a=2)a=numstack.pop();b=numstack.pop();float t=b;for(int i=1;ia;i+)b*=t;numstack.push(b);return true;elsereturn false; case (: return true; default : return true; 题目三:排课问题题目三:排课问题 一、实验名称:一、实验名称: 排课问题 二、需求分析:二、需求分析: 设计任务: 在文件 conf.txt 中保存若干门课程,以及该课程需要哪些前续课程。要求 一门课程需要一个学期才能学完。保存格式为例如: 大学物理
36、c 语言 java 语言:c 语言 微积分 高级物理学:微积分,大学物理 界面上,首先出现一个按钮,点击,载入 conf.txt。点击另一个按钮,显 示需要几个学期上完这些课程,每学期各学习哪些课程。 (1)输入的形式和输入值的范围:读入文件。 (2)输出的形式:文本输出。 (3)程序所能达到的功能:从文件中读出数据,采用拓扑排序,显示出各学期需 要学习哪些课程。 (4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 三、概要设计三、概要设计 1adt stack 数据对象:d=ai|aielemset,i=1,2,n, n0 数据关系:r1=|ai-1,aid,i=1,2
37、,n 基本操作: initstack( /对各顶点求入度 indegree0.vernum-1 initstack(s); for(i=0;inextarc) k=p-adjvex; if(!(-indegreek) push(s,k); /若入度减为 0,则入栈 /for /while if(countbase=(elemtype *)malloc(stack_init_size*sizeof(elemtype); if(!s-base) printf(memory allocation failed, goodbye); exit(1); s-top=s-base; s-stacksize
38、=stack_init_size; 出栈操作函数 原型:int pop(sqstack *s,elemtype *e) 功能:删除 s 的栈顶元素,并用 e 返回; 参数:sqstack *s,elemtype *e 返回值:int 源代码: int pop(sqstack *s,elemtype *e) if(s-top=s-base) return error; *e=*-s-top; return 0; 进栈操作函数 原型 void push(sqstack *s,elemtype e) 功能:插入元素 e 为新的栈顶元素 参数:sqstack *s,elemtype e 返回值:voi
39、d 源代码: void push(sqstack *s,elemtype e)/ if(s-top-s-base=s-stacksize) s-base=(elemtype*)realloc(s-base,(s- stacksize+stackincrement)* sizeof(elemtype); if(!s-base) printf(memory allocation failed, goodbye); exit(1); s-top = s-base+s-stacksize; *s-top+=e; 判断栈是否为空的函数 原型 int stackempty(sqstack *s) 功能:判
40、断栈是否为空 参数:sqstack *s 返回值:int 源代码: int stackempty(sqstack *s) if(s-top=s-base) return ok; else return error; 创建图的函数 原型 void creatgraph(algraph *g) 功能:创建一有向图 参数:algraph *g 返回值:void 源代码: void creatgraph(algraph *g) int m, n, i; arcnode *p; printf(请输入顶点数和边数:); scanf(%d%d, for (i = 1; i vexnum; i+) g-ver
41、ticesi.data = i; g-verticesi.firstarc = null; for (i = 1; i arcnum; i+) /输入存在边的点集合 printf(n 请输入存在边的两个顶点的序号:); scanf(%d%d, while (n g-vexnum | m g-vexnum) printf(输入的顶点序号不正确 请重新输入:); scanf(%d%d, p = (arcnode*)malloc(sizeof(arcnode); if (p = null) printf(memory allocation failed,goodbey); exit(1); p-ad
42、jvex = m; p-nextarc = g-verticesn.firstarc; g-verticesn.firstarc = p; printf(建立的邻接表为:n); /输出建立好的邻接表 for(i = 1; i vexnum; i+) printf(%d,g-verticesi.data); for(p = g-verticesi.firstarc; p; p = p-nextarc) printf(%3d,p-adjvex); printf(n); 求入度操作函数 原型 void findindegree(algraph g, int indegree) 功能:求图中顶点的入度
43、 参数:algraph g, int indegree 返回值:void 源代码: void findindegree(algraph g, int indegree) int i; for (i = 1; i = g.vexnum; i+) indegreei = 0; for (i = 1; i adjvex+; g.verticesi.firstarc = g.verticesi.firstarc-nextarc; 拓扑排序函数 原型 void topologicalsort(algraph g) 功能:将一个偏序排列成一个全序 参数:algraph g 返回值:void 源代码: vo
44、id topologicalsort(algraph g) /进行拓扑排序 int indegreem;/存放顶点的入度 int i, k, n; int count = 0; arcnode *p; sqstack s; findindegree(g, indegree); initstack( for (i = 1; i = g.vexnum; i+) printf(第%d 个点的入度为%d n, i, indegreei); printf(n); for ( i = 1; i nextarc) k = p-adjvex; if (!(-indegreek) push( printf(n)
45、; if (count g.vexnum)/该有向图有回路 printf(出现错误n); else printf(排序成功n); 2存储结构:存储结构: (1),表结点 typedef struct arcnode int adjvex; struct arcnode *nextarc; arcnode; (2),链表的存储结构 typedef struct vnode int data; arcnode *firstarc; vnode,adjlistmax_vextex_num; (3),图的存储结构 typedef struct adjlist vertices; int vexnum,
46、 arcnum; algraph; (4),栈的存储结构 typedef struct elemtype *base; elemtype *top; int stacksize; sqstack; 五、调试分析五、调试分析 算法的时间复杂性和可能的改进设想算法的时间复杂性和可能的改进设想 该拓扑排序算法,对有 n 个顶点和 e 条弧的有向图而言,建立求各顶点的 入度的时间复杂度为 o(e);建立入度顶点栈的时间复杂度为 o(n);在拓扑排序 过程中,若有向图无环,则每个顶点进一次栈,出一次栈,入度减 1 的操作在 while 语句中总共执行 e 词,所以,总的时间复杂度为 o(n+e)。 六、
47、测试结果六、测试结果 界面效果图 打开文件效果图 运行结果 七、课程设计总结七、课程设计总结 在近两周的课程设计中,我认为最大的收获就是在遇到问题时解决问题的 过程。如对语言并不完全了解,如有些函数的操作需要通过查阅相关书籍和帮 助来了解,同时也向其他同学询问,才得以最终完成项目。这次课程设计,培 养了我自己的实际分析能力、编程和动手能力,最终目标是想通过这种形式, 帮助自己更加系统的掌握数据结构的主要内容;培养了自己对 java 语言程序设 计的兴趣,更加有信心学好这门课程;设计了一个拓扑排序程序,解决实际问 题,将所学内容运用到实际当中。 通过这次课程设计,我学到了很多,同时也认识到了自己
48、的不足。学校的 课程不能将所有的知识都讲授给我们,所以要想学好一门课程,我们应该充分 利用课余时间多看专业相关的书籍,丰富自己的知识。同时,作为计算机专业 的学生,动手能力也是非常重要的,在掌握了理论知识后应多多上机实践。只 有多多实践,才能更好地学习好一门语言,更好地理解课程的内容。 八、参考文献八、参考文献 【1】 清华大学计算机系列教材数据结构(c c 语言版)/严蔚敏,吴伟民编 著北京:清华大学出版社,2007.4 【2】 java jdk 5.0 学习笔记/良葛格编著北京:清华大学出版社,2006.8 九、附录九、附录 package sort.test; import sort.i
49、nterface; public class outmain /* * param args */ public static void main(string args) new interface(); package sort; import java.awt.borderlayout; import javax.swing.jbutton; import javax.swing.jfilechooser; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; impor
50、t javax.swing.jtable; import javax.swing.jtextfield; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; import com.birosoft.liquid.liquidlookandfeel; /* * 输出界面 * */ public class interface extends jframe jtextfield text; jtable table; jfilechooser filechooser; static tr
51、y /uimanager.setlookandfeel(ch.randelshofer.quaqua.quaqualookandfeel); uimanager.setlookandfeel(new liquidlookandfeel(); catch (unsupportedlookandfeelexception e) / todo auto-generated catch block e.printstacktrace(); public interface() super(排课); init(); private void init() string title = new strin
52、g学期,所修课程; string args = new string00; this.setsize(480, 320); this.setlocationrelativeto(null); jpanel panel = new jpanel(); text = new jtextfield(15); borderlayout layout = new borderlayout(); this.setlayout(layout); panel.add(text); jbutton button = new jbutton(选择课程文件); button.setactioncommand(ope
53、n); filechooser = new jfilechooser(.); panel.add(button); button.addactionlistener(new listener(this); table = new jtable(args,title); jscrollpane pane = new jscrollpane(table, jscrollpane.vertical_scrollbar_always , jscrollpane.horizontal_scrollbar_always); this.add(panel,borderlayout.north); this.
54、add(pane,borderlayout.center); this.setdefaultcloseoperation(jframe.exit_on_close); this.setvisible(true); package sort; import java.io.bufferedreader; import java.io.file; import java.io.filenotfoundexception; import java.io.filereader; import java.io.ioexception; import java.io.linenumberreader; i
55、mport java.util.arraylist; import exception.dateexception; /* * * 实现排课类 * */ public class arranging /* * 节点内部类,用来存储数据 * 一是存储课程名和学该课程前的前提课程 * 二是用来存储课程安排次序和该次可学的内容 */ public class node string name; arraylist baselist; /* * 空构造器 */ public arranging() /* * 排课方法 * 第一次排课的课程是 node 节点所代表课程该课程的前提课程是空,将其写入 ar
56、raylist * 再将上次课程从剩余课程的前提课程中删除,重复以上过程知道所有课程被排完或 排了 * 8 次后仍未排完(大学教育只有四年,八个学期,若八次不能排完,说明课程安排 存在问题, * 超出本方法处理范围、不予处理) * param filepath * return * throws */ public arraylist arrayclass(file filepath) throws dateexception, filenotfoundexception,ioexception arraylist result = new arraylist();/存储结果 arraylis
57、t list = readfile(filepath); integer i = 1;/记录排课次序 int t = 1;/标记 while(list.size() 0) = i.tostring(); s.baselist = new arraylist(); for(node tem:list) /提取前提课程为空的节点,写入 result if(tem.baselist.size() = 0) s.baselist.add(); /list.remove(tem); for(string tem:s.baselist) /删除前提课程为空的节点 list.r
58、emove(serchindex(list,tem); for(node tem:list) /删除剩余节点的前提课程已修过课程 for(string tem2:s.baselist) tem.baselist.remove(tem2); result.add(s); i +; return result;/返回 /* * 文件读取方法 * param * return */ public arraylist readfile(file filepath) throws dateexception ,filenotfoundexception,ioexception arraylist lis
59、t = new arraylist(); /file file = new file(filepath); bufferedreader read= new bufferedreader(new linenumberreader(new filereader(filepath); try string temp; while(temp = read.readline() != null) if(.equals(temp.trim() continue; if(!checkchar(temp) node s = new node(); = temp; s.baselist = ne
60、w arraylist(); list.add(s); else string arg0 = temp.split(:);/按“:”拆分 if(arg0.length != 2 ) throw new dateexception(); node s = new node(); = arg00; string arg1 = arg01.split(,);/按“, ”拆分 arraylist l = new arraylist(); for(string tem:arg1) l.add(tem); s.baselist = l; list.add(s); catch (filenot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洛阳理工学院《VB语言程序设计》2023-2024学年第一学期期末试卷
- 单位人事管理制度范文选集
- 单位人力资源管理制度集粹选集
- 饮料生产降水施工合同
- 高端别墅区房屋转让租赁协议
- 2024年标准餐饮服务合同模板版
- 商务写字楼外墙改造合同
- 造纸工程分包协议
- 矿区生态恢复复垦承诺书
- 瑜伽馆门头施工合同
- 220kV~750kV油浸式电力变压器使用技术条件
- MOOC 生物化学与分子生物学-中国药科大学 中国大学慕课答案
- 第2课+古代希腊罗马【中职专用】《世界历史》(高教版2023基础模块)
- 金属屋面工程防水技术规程
- 《福建省安全生产条例》考试复习题库45题(含答案)
- 人工智能增强战略规划
- 无机材料与功能化学
- 110kV变电站及110kV输电线路运维投标技术方案(第一部分)
- 消防设施安全检查表
- 餐厅用电安全承诺书
- 吉林省延边州2023-2024学年高一上学期期末学业质量检测数学试题(解析版)
评论
0/150
提交评论