《數據結構》課程設計報告-線性表進行算式計算、排課問題,JAVA語言,截圖完整_第1頁
《數據結構》課程設計報告-線性表進行算式計算、排課問題,JAVA語言,截圖完整_第2頁
《數據結構》課程設計報告-線性表進行算式計算、排課問題,JAVA語言,截圖完整_第3頁
《數據結構》課程設計報告-線性表進行算式計算、排課問題,JAVA語言,截圖完整_第4頁
《數據結構》課程設計報告-線性表進行算式計算、排課問題,JAVA語言,截圖完整_第5頁
已閱讀5頁,還剩43頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、中南大學?數據結構?課程設計報告指導教師 學 院 信息科學與工程學院 完成時間 2010年7月7日 目 錄 TOC o 1-3 h z u HYPERLINK l _Toc266454160 目 錄 PAGEREF _Toc266454160 h - 2 - HYPERLINK l _Toc266454161 題目一:利用線性表進行算式計算 PAGEREF _Toc266454161 h - 1 - HYPERLINK l _Toc266454162 一、實驗名稱: PAGEREF _Toc266454162 h - 1 - HYPERLINK l _Toc266454163 二、需求分析:

2、PAGEREF _Toc266454163 h - 1 - HYPERLINK l _Toc266454164 三、概要設計 PAGEREF _Toc266454164 h - 1 - HYPERLINK l _Toc266454165 四、詳細設計 PAGEREF _Toc266454165 h - 3 - HYPERLINK l _Toc266454166 五、調試分析 PAGEREF _Toc266454166 h - 5 - HYPERLINK l _Toc266454167 六、測試結果 PAGEREF _Toc266454167 h - 5 - HYPERLINK l _Toc26

3、6454168 七、課程設計總結 PAGEREF _Toc266454168 h - 7 - HYPERLINK l _Toc266454169 八、參考文獻 PAGEREF _Toc266454169 h - 8 - HYPERLINK l _Toc266454170 九、附錄 PAGEREF _Toc266454170 h - 9 - HYPERLINK l _Toc266454171 題目三:排課問題 PAGEREF _Toc266454171 h - 21 - HYPERLINK l _Toc266454172 一、實驗名稱: PAGEREF _Toc266454172 h - 21

4、- HYPERLINK l _Toc266454173 二、需求分析: PAGEREF _Toc266454173 h - 21 - HYPERLINK l _Toc266454174 三、概要設計 PAGEREF _Toc266454174 h - 21 - HYPERLINK l _Toc266454175 四、詳細設計 PAGEREF _Toc266454175 h - 24 - HYPERLINK l _Toc266454176 五、調試分析 PAGEREF _Toc266454176 h - 33 - HYPERLINK l _Toc266454177 六、測試結果 PAGEREF

5、_Toc266454177 h - 33 - HYPERLINK l _Toc266454178 七、課程設計總結 PAGEREF _Toc266454178 h - 34 - HYPERLINK l _Toc266454179 八、參考文獻 PAGEREF _Toc266454179 h - 35 - HYPERLINK l _Toc266454180 九、附錄 PAGEREF _Toc266454180 h - 35 -題目一:利用線性表進行算式計算一、實驗名稱:利用線性表進行算式計算二、需求分析:設計任務:界面上出現一個文本框,輸入一個算式,點擊按鈕,顯示結果。該算式內只含有數字、括號、

6、+、-、*、/、%這幾種字符,優先級為:括號-%-*,/-+,-。如輸入:2+3*5,結果為17,輸入(2+3)*5結果為25。輸入格式有誤,需要給予提示。在算法中,必須實現對輸入的算式字符串的分析,而不僅僅是得到結果。(1)輸入的形式和輸入值的范圍:數字和運算符只含有括號、+、-、*、/、%。(2)輸出的形式:以數字和運算符組成的算式形式輸出。(3)程序所能到達的功能:對輸入數字和運算符進行分析,并輸出分析結果。(4)測試數據:包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。三、概要設計抽象數據類型的定義:ADT Stack 數據對象:D=ai|aiElemSet,i=1,2,n,

7、n0數據關系:R1=|ai-1,aiD,i=1,2,n根本操作: InitStack(&S); 初始化棧S,構造一個空棧 StackEmpty(S); 初始條件:棧S已存在操作結果:假設棧為空棧,那么返回true,否那么返回false StackLengthS;初始條件:棧S已存在操作結果:返回S的元素個數,即棧的長度GetTop(S,&e)初始條件:棧S已存在且非空操作結果:用e返回S的棧頂元素Push(&S,e)初始條件:棧S已存在操作結果:插入元素e為新的棧頂元素Pop(&S,&e)初始條件:棧S已存在且非空操作結果:刪除S的棧頂元素,并用e返回其值主程序的流程:定義鏈棧,判斷運算符優先

8、級,實現具體計算,錯誤處理。四、詳細設計主要算法:(偽代碼)#define N 50#define OK 1#define ERROR 0#include #include typedef structint top;double arrayN;NumStack;typedef structint top;char arrayN;OpStack;/把字符轉換為相應的整數的函數int Cint(char mychar)return (mychar-48);/數字進棧的函數status PushNum(NumStack &numstack,double num)if(numstack.topN)

9、numstack.top+;numstack.arraynumstack.top-1=num;return OK;else return ERROR;/數字出棧的函數status PopNum(NumStack &numstack,double &num)if(numstack.top)num=numstack.arraynumstack.top-1;numstack.top-;return OK;else return ERROR;/操作符進棧的函數status PushOp(OpStack &opstack,char &op)if(opstack.topN) opstack.top+;op

10、stack.arrayopstack.top-1=op;return OK;else return ERROR;/操作符出棧的函數status PopOp(OpStack &opstack,char &op)if(opstack.top) op=opstack.arrayopstack.top-1;opstack.top-;return OK;else return ERROR;/進行運算的函數double Calc(double a,double b,char c)double result;五、調試分析1調試過程中遇到的問題是如何解決的以及對設計與實現的討論和分析調試過程中,對于非法輸入的

11、測試很重要,對于一些不符合常規的輸入進行測試,并針對存在的問題對源代碼進行修改,可以對于非法輸入進行提示。2算法的時間復雜性和可能的改良設想此算法的運行時間主要花在while循環上,它從頭到尾掃描后綴表達式中的每一個數據每個操作數或運算符均為一個數據,假設后綴表達式由n個數據組成,那么此算法的時間復雜度為O(n)。在轉換算法中,中綴算術表達式中的每個字符均需要掃描一遍,對于掃描到的每個運算符,最多需要進行入棧、出棧和寫入后綴表達式這三次操作,對于掃描到的數字或小數點,只需要把它直接寫入到后綴表達式即可。所以,此算法的時間復雜度為O(n),n為后綴表達式中字符的個數。六、測試結果 1、輸入:5+

12、6*3%22、輸入:3+5*8-2%4輸出:3、輸入:1*5+2 輸出:對不起!表達式有錯!4、輸入:123321123+456654456 7555E85、輸入:11116、輸入:53+2 輸出:對不起!表達式有錯!7、輸入:5+9*3-8/4%2 輸出:5+9*3-8/4%2= -Infinity 界面效果圖運行結果顯示-1 運行結果顯示-2七、課程設計總結通過本次數據結構課程設計,我有很多收獲,在此,我將我的親身感受回憶和總結于下:在上學期中學習了本專業的核心課程數據結構。什么是數據結構呢?這是我們首先考慮到的問題:從字面上來看,“數據結構分數據和結構兩局部,這就很容易聯想到數據結構的本

13、質是一種使數據結構化的知識。通過理論課程的學習,使我初步了解了數據結構的根本知識。數據結構是一門研究非數值計算的程序設計問題中計算機的操作對象以及它們之間的關系和操作的學科。現代程序設計已轉型為討論如何在最大程度上處理好數據之間的相互關系并提升數據處理的效率。在這里,數據結構就發揮了重要的作用。數據結構可以說是編程的靈魂,它不是一門語言。數據結構和程序設計語言本身沒有任何聯系,唯一有的關系就是用程序語言去描述數據結構。現今我們所學習的數據結構課程常用的描述語言主要有C、C+和JAVA等。數據結構只是給我們提供處理常規問題的一個思路而已,講的是已經成熟的編程思想和算法,適用于所有開發語言。所以說

14、,組織好數據結構是寫程序的第一步。數據結構是一門實踐性較強的計算機根底課程,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。課程設計的目的就是要到達理論與實際應用相結合,使我們能夠根據數據對象的特性,學會數據組織的方法,能把現實世界中的實際問題在計算機內部表示出來,同時強化對編程語言的使用,培養根本的、良好的程序設計能力。我于大二上學期從軟件學院軟件工程專業轉到信息學院計算機專業,在09年暑假中,我參加了軟件學院的JAVA實訓,了解了一定的JAVA語言知識,因為本次課程設計要制作界面,所以選擇JAVA語言有它的優勢。通過這次課程設計,我體會到要做出一個好的程序是很難的,盡管我花了一個

15、多星期去做這兩個工程,但這個程序還是不夠理想,只是到達一些根本的水平而已,跟那些功能強大的程序還是有很大的距離。這個程序還有一些地方值得完善的,比方算式計算中一些非法輸入如數字后面連續輸入括號無法判斷非法并影響計算結果等,這些問題需要程序員考慮得更全面,使實現的功能更完善,在今后不斷改良。在近兩周的課程設計中,我認為最大的收獲就是在遇到問題時解決問題的過程。如對語言并不完全了解,如有些函數的操作需要通過查閱相關書籍和幫助來了解,另外,在入棧、出棧的算法設計中,曾因為思路不清晰而在編代碼時遇到了困難,對于運算符和數字的別離和判斷也曾困擾過我。我通過查閱書籍、上網搜索和向其他同學詢問,才得以最終完

16、成工程。通過這次課程設計,我學到了很多,同時也認識到了自己的缺乏。學校的課程不能將所有的知識都講授給我們,所以要想學好一門課程,我們應該充分利用課余時間多看專業相關的書籍,豐富自己的知識。同時,作為計算機專業的學生,動手能力也是非常重要的,在掌握了理論知識后應多多上機實踐。只有多多實踐,才能更好地學習好一門語言,更好地理解課程的內容。八、參考文獻【1】 清華大學計算機系列教材數據結構(C語言版)/嚴蔚敏,吳偉民編著【2】 北京:清華大學出版社,2006.8 九、附錄package stack;public class CharStack CharNode top;int sum;public

17、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+;class CharNodeCharNode node;c

18、har c;public CharNode() 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 newN

19、ode=new CharNode();newNode.c=c;newNode.node=top.node;top.node=newNode;sum+;class CharNodeCharNode 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

20、/* * () * 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 = anc

21、hor; 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 * retu

22、rn */ 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(i

23、nt 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;

24、case (: 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,以便在主程序中能及時檢查

25、出錯誤 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 privateMainClass mainClass;JTabbedPane tab;JTextField input, output;JButton btnWork;private JTextArea txtaDisplay;

26、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 MainClass().init();pu

27、blic 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.setLocationRelativeTo(nu

28、ll);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 getFirstPanel() JPanel pan

29、el = 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(分析結果);lblInput = new JLabel(輸入表達式:);bt

30、nProcess = 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, BorderLayout.CENTER);pnlSouth.add(lblInput, BorderL

31、ayout.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() public void actionPerformed(ActionEvent e) String sour

32、ce = 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 GetPriority();/ GetPriority priority=new

33、 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 = false;int lku = 0;int l = 0;char chInStack; / 這個字符變量在下面代碼中充當存儲從運算符棧

34、中出棧的運算符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 & a priority.outSideStack(ch2);if (t)return true;elsereturn false;package stack;public class NumStack IntNode top; public NumStack() top=new

35、IntNode(); public float pop() /出棧 /對于頭結點,存整數類型的a屬性存的是棧內的元素個數 /對于出棧操作,由于本函數返回值為整數,故不進行判斷是否棧內還有元素, float t=top.node.a; top.node=top.node.node; top.a-; return t; public void push(float a) /進棧 IntNode newnode=new IntNode(); newnode.a=a; newnode.node=top.node; top.node=newnode; top.a+; class IntNodeIntNo

36、de 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) float a; float b;switch(chInStack) case +: if(numStack.top.a=2)a=numStack.pop();b=numS

37、tack.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(a*b);return true;elsereturn false; case /: if(numStac

38、k.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(numStack.top.a=2)a=numStack.pop();b=numStack.pop();float t=b;for(int i=1;ia;i+)b*=t;nu

39、mStack.push(b);return true;elsereturn false; case (: return true; default : return true;題目三:排課問題一、實驗名稱:排課問題二、需求分析:設計任務:在中保存假設干門課程,以及該課程需要哪些前續課程。要求一門課程需要一個學期才能學完。保存格式為例如:大學物理C語言Java語言:C語言微積分高級物理學:微積分,大學物理界面上,首先出現一個按鈕,點擊,載入conf.txt。點擊另一個按鈕,顯示需要幾個學期上完這些課程,每學期各學習哪些課程。(1)輸入的形式和輸入值的范圍:讀入文件。(2)輸出的形式:文本輸出。(

40、3)程序所能到達的功能:從文件中讀出數據,采用拓撲排序,顯示出各學期需要學習哪些課程。(4)測試數據:包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。三、概要設計1ADT 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 StackLengthS;初始條件:棧S已存在操作結果:返回S的元素個數,即棧的長度GetTop(S,&e)初始條

41、件:棧S已存在且非空操作結果:用e返回S的棧頂元素Push(&S,e)初始條件:棧S已存在操作結果:插入元素e為新的棧頂元素Pop(&S,&e)初始條件:棧S已存在且非空操作結果:刪除S的棧頂元素,并用e返回其值2函數框圖函數名函數功能Main總控函數InitStack初始化棧Pop出棧Push進棧StackEmpty棧的判空CreatGraph創立圖FindInDegree求圖中頂點入度TopologicalSort拓撲排序3函數流程圖: 1主函數流程圖:2求入度函數的流程圖: 3創立圖的流程圖: 4拓撲排序函數的流程圖:四、詳細設計1拓撲排序主要算法:Status TopologicalS

42、ort(ALGraph G)/有向圖G采用鄰接表存儲結構/假設G無回路,那么輸出G的頂點的一個拓撲排序序列并返回OK,否那么返回ERROR。FindInDegree(G,indegree); /對各頂點求入度indegree0.vernum-1InitStack(S);for(i=0;inextarc) k=p-adjvex; if(!(-indegreek) Push(S,k); /假設入度減為0,那么入棧 /for/whileif(countbase=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType);if(!S-base)printf(

43、memory allocation failed, goodbye);exit(1);S-top=S-base;S-stacksize=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)功能

44、:插入元素e為新的棧頂元素參數:SqStack *S,ElemType e返回值:void源代碼: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;判斷棧是否為空的函數原型i

45、nt StackEmpty(SqStack *S)功能:判斷棧是否為空參數:SqStack *S返回值:int源代碼:int StackEmpty(SqStack *S)if(S-top=S-base)return OK;elsereturn ERROR;創立圖的函數原型void CreatGraph(ALGraph *G)功能:創立一有向圖參數:ALGraph *G返回值:void源代碼:void CreatGraph(ALGraph *G)int m, n, i;ArcNode *p;printf(請輸入頂點數和邊數:);scanf(%d%d,&G-vexnum,&G-arcnum);fo

46、r (i = 1; i vexnum; i+)G-verticesi.data = i;G-verticesi.firstarc = NULL;for (i = 1; i arcnum; i+) /輸入存在邊的點集合printf(n請輸入存在邊的兩個頂點的序號:);scanf(%d%d,&n,&m);while (n G-vexnum | m G-vexnum)printf(輸入的頂點序號不正確 請重新輸入:);scanf(%d%d,&n,&m);p = (ArcNode*)malloc(sizeof(ArcNode);if (p = NULL)printf(memory allocation

47、 failed,goodbey);exit(1);p-adjvex = 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 ind

48、egree)功能:求圖中頂點的入度參數: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源代碼:v

49、oid TopologicalSort(ALGraph G) /進行拓撲排序int indegreeM;/存放頂點的入度int i, k, n;int count = 0;ArcNode *p;SqStack S;FindInDegree(G, indegree);InitStack(&S);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(&S,k);printf(n);if (

50、count G.vexnum)/該有向圖有回路printf(出現錯誤n);elseprintf(排序成功n);2存儲結構:(1),表結點typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;ArcNode;(2),鏈表的存儲結構typedef struct VNodeint data;ArcNode *firstarc;VNode,AdjListMAX_VEXTEX_NUM;(3),圖的存儲結構typedef structAdjList vertices;int vexnum, arcnum;ALGraph;(4),棧的存儲結構typ

51、edef struct ElemType *base;ElemType *top;int stacksize;SqStack;五、調試分析算法的時間復雜性和可能的改良設想該拓撲排序算法,對有n個頂點和e條弧的有向圖而言,建立求各頂點的入度的時間復雜度為O(e);建立入度頂點棧的時間復雜度為O(n);在拓撲排序過程中,假設有向圖無環,那么每個頂點進一次棧,出一次棧,入度減1的操作在while語句中總共執行e詞,所以,總的時間復雜度為O(n+e)。六、測試結果 界面效果圖 翻開文件效果圖 運行結果七、課程設計總結在近兩周的課程設計中,我認為最大的收獲就是在遇到問題時解決問題的過程。如對語言并不完全

52、了解,如有些函數的操作需要通過查閱相關書籍和幫助來了解,同時也向其他同學詢問,才得以最終完成工程。這次課程設計,培養了我自己的實際分析能力、編程和動手能力,最終目標是想通過這種形式,幫助自己更加系統的掌握數據結構的主要內容;培養了自己對JAVA語言程序設計的興趣,更加有信心學好這門課程;設計了一個拓撲排序程序,解決實際問題,將所學內容運用到實際當中。通過這次課程設計,我學到了很多,同時也認識到了自己的缺乏。學校的課程不能將所有的知識都講授給我們,所以要想學好一門課程,我們應該充分利用課余時間多看專業相關的書籍,豐富自己的知識。同時,作為計算機專業的學生,動手能力也是非常重要的,在掌握了理論知識

53、后應多多上機實踐。只有多多實踐,才能更好地學習好一門語言,更好地理解課程的內容。八、參考文獻【1】 清華大學計算機系列教材數據結構(C語言版)/嚴蔚敏,吳偉民編著北京:清華大學出版社,2006.8 九、附錄package sort.test;import sort.Interface;public class Outmain /* * param args */public static void main(String args) new Interface();package sort;import java.awt.BorderLayout;import javax.swing.JBut

54、ton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;import com.birosoft.liquid.LiquidLookAndFeel;

55、/* * 輸出界面 * */public class Interface extends JFrame JTextField text;JTable table;JFileChooser fileChooser;statictry/UIManager.setLookAndFeel(ch.randelshofer.quaqua.QuaquaLookAndFeel);UIManager.setLookAndFeel(new LiquidLookAndFeel(); catch (UnsupportedLookAndFeelException e)/ TODO Auto-generated catc

56、h blocke.printStackTrace();public Interface() super(排課);init();private void init() String title = new String學期,所修課程;String args = new String00;this.setSize(480, 320);this.setLocationRelativeTo(null);JPanel panel = new JPanel();text = new JTextField(15);BorderLayout layout = new BorderLayout();this.s

57、etLayout(layout);panel.add(text);JButton button = new JButton(選擇課程文件);button.setActionCommand(open);fileChooser = new JFileChooser(.);panel.add(button);button.addActionListener(new Listener(this);table = new JTable(args,title);JScrollPane pane = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_A

58、LWAYS ,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);this.add(panel,BorderLayout.NORTH);this.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 j

59、ava.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;import java.util.ArrayList;import Exception.DateException;/* * * 實現排課類 * */public class Arranging /* * 節點內部類,用來存儲數據 * 一是存儲課程名和學該課程前的前提課程 * 二是用來存儲課程安排次序和該次可學的內容 */public class NodeString name;ArrayList baseList;/* * 空構造器 */p

60、ublic Arranging() /* * 排課方法 * 第一次排課的課程是Node節點所代表課程該課程的前提課程是空,將其寫入ArrayList * 再將上次課程從剩余課程的前提課程中刪除,重復以上過程知道所有課程被排完或排了 * 8次后仍未排完大學教育只有四年,八個學期,假設八次不能排完,說明課程安排存在問題, * 超出本方法處理范圍、不予處理 * param filepath * return * throws */public ArrayList arrayclass(File filepath) throws DateException, FileNotFoundException

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論