




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 視頻監控的設計方案
- 自動控制原理試題庫有答案
- 黑龍江省大慶市肇源縣(五四學制)2023-2024學年八年級下學期7月期末考試道德與法治試卷
- 幼兒園大班《我們的小區》教案
- 財務-合理避稅60個方法和42個技巧匯 總 你所不知道的“合理避稅”方案
- 璀璨未來文化館館投資指南
- 2025年android狀態欄!Android面試你必須要知道的那些知識完整PDF
- 2025年Android小技巧:這些面試官常問的開發面試題你都掌握好了嗎?源碼+原理+手寫框架-android 面試會問框架原理嗎
- 部編版二年級下冊第八單元《祖先的搖籃》教案
- 建筑施工特種作業-樁機操作工真題庫-3
- 中醫基礎理論考試題庫及答案五
- 開票稅點自動計算器
- 國家開放大學電大《10861理工英語4》期末終考題庫及答案
- 2024年小學四年級下冊數學期末測試卷附完整答案【典優】
- 廣東省中山市2022-2023學年高一年級下冊期末統一考試物理試題含解析
- 2024年橫州茉莉花投資集團有限責任公司招聘筆試沖刺題(帶答案解析)
- 蔬菜栽培學智慧樹知到期末考試答案章節答案2024年浙江大學
- JB-T 14320-2022 氧氣用止回閥
- 專題強化三 異面直線、線面角和二面角技巧-2021-2022學年高一數學【考題透析】滿分計劃系列(人教A版2019必修第二冊)
- 產品封樣管理制度
- 2024年湖北襄陽市檢察機關襄陽市城郊地區檢察院招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論