版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)</p><p> Data Structure Demonstration System</p><p><b> 目錄</b></p><p><b> 目錄I</b></p><p><b> 摘要IV</b><
2、/p><p> ABSTRACTV</p><p><b> 前言1</b></p><p><b> 第1章 緒論2</b></p><p> 1.1課題研究背景2</p><p> 1.2國內(nèi)計算機輔助教學的現(xiàn)狀2</p><p>
3、 1.3計算機輔助教學的發(fā)展趨勢4</p><p> 1.4系統(tǒng)建設(shè)的目的4</p><p><b> 本章小結(jié)5</b></p><p> 第2章 需求分析6</p><p> 2.1功能性需求分析6</p><p> 2.1.1系統(tǒng)需求6</p><
4、p> 2.1.2識別參與者和用例7</p><p> 2.1.3用例的事件流描述9</p><p> 2.2非功能性需求分析18</p><p> 2.2.1設(shè)計思想18</p><p> 2.2.2可行性分析19</p><p><b> 本章小結(jié)20</b><
5、;/p><p> 第3章 系統(tǒng)詳細設(shè)計21</p><p> 3.1系統(tǒng)總體結(jié)構(gòu)圖21</p><p> 3.2靜態(tài)結(jié)構(gòu)模型21</p><p> 3.2.1定義系統(tǒng)對象類21</p><p> 3.2.2定義用戶界面類25</p><p> 3.2.3建立類圖31</
6、p><p> 3.3動態(tài)行為模型31</p><p><b> 本章小結(jié)39</b></p><p> 第4章 系統(tǒng)實現(xiàn)40</p><p> 4.1多線程簡介40</p><p> 4.1.1線程、多線程概念40</p><p> 4.1.2實現(xiàn)多線程的
7、方法40</p><p> 4.2動態(tài)算法演示模板42</p><p> 4.3算法演示的多線程設(shè)計43</p><p> 4.3.1源代碼同步演示的實現(xiàn)44</p><p> 4.3.2動畫的同步實現(xiàn)45</p><p> 4.3.3算法中變量值的同步實現(xiàn)45</p><p&
8、gt;<b> 本章小結(jié)45</b></p><p><b> 結(jié)論46</b></p><p><b> 總結(jié)與體會47</b></p><p><b> 謝辭48</b></p><p><b> 參考文獻49</b
9、></p><p><b> 附錄一50</b></p><p><b> 附錄二55</b></p><p> 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)</p><p><b> 摘要</b></p><p> 本系統(tǒng)以清華大學出版社出版的C語言版《數(shù)
10、據(jù)結(jié)構(gòu)》為藍本,合理地選擇數(shù)據(jù)結(jié)構(gòu)中部分算法并在系統(tǒng)中進行有機地組合,形成優(yōu)化的動態(tài)演示系統(tǒng)。 它可適應讀者對算法的演示數(shù)據(jù)和過程執(zhí)行的控制方式的不同需求, 在計算機的屏幕上顯示算法執(zhí)行過程中數(shù)據(jù)的邏輯結(jié)構(gòu)或存儲結(jié)構(gòu)的變化狀況或遞歸算法執(zhí)行過程中棧的變化狀況。本系統(tǒng)采用C#多線程技術(shù)來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)算法的算法動態(tài)演示設(shè)計,提供及源代碼跟蹤、變量跟蹤、模擬動態(tài)效果“三合一“的算法演示同步平臺。</p><p> 關(guān)
11、鍵詞:算法,動態(tài)演示,C#,多線程,同步</p><p> Data Structure Demonstration System</p><p><b> ABSTRACT</b></p><p> This system takes Qinghua University publishing house publication C l
12、anguage version “Data Structure“ as a main source, reasonably chooses part of algorithms in the Data Structure and carries on in the system organically combinations, forms the optimized dynamic demonstration system. It m
13、ay adapt the readers’ different demands to the algorithm data-in and control modes the process execution, and demonstrates in the algorithm implementation on the computer screen the data logical organization eit</p>
14、;<p> Keywords: Data structures, Dynamic demonstration, C#, Multhread, Synchronous</p><p><b> 前言</b></p><p> 數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的核心課程,對各類算法的理解則是課程教學的重點和難點,算法動態(tài)演示作為輔助教學過程的手段則可以有效
15、幫助學生更快的理解、掌握算法。數(shù)據(jù)結(jié)構(gòu)對后續(xù)課程的學習極其重要。但該課程涉及大量的概念、定義、模型和算法,顯得很抽象和深奧。在教學過程中,如果能加以計算機輔助教學,可以提高教學效果,所以編寫這樣的程序不僅有助于學習數(shù)據(jù)結(jié)構(gòu),同時也大大增強了學生的學習興趣,提高學生的編程能力。這是因為,一方面利用算法演示系統(tǒng)的生動性和直觀性,使教學內(nèi)容條理化和形象化,降低了對知識理解的難度;另一方面,由于演示系統(tǒng)的趣味性和交互性,有利于激發(fā)學生濃厚的學習
16、興趣,使其愿學、樂學。</p><p> 可視化是演示系統(tǒng)應該具備的要求。本系統(tǒng)采用C#多線程技術(shù)來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)算法的算法動態(tài)演示設(shè)計,提供及源代碼跟蹤、變量跟蹤、模擬動態(tài)效果“三合一“的算法演示同步平臺。</p><p><b> 緒論</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)的核心課程,重點培養(yǎng)學生在對數(shù)據(jù)分析組織與程序設(shè)計
17、算法思想上的綜合能力。算法是數(shù)據(jù)結(jié)構(gòu)的主要內(nèi)容,也是數(shù)據(jù)結(jié)構(gòu)教學的重點和難點。但在數(shù)據(jù)結(jié)構(gòu)的教學過程中,使用傳統(tǒng)的靜態(tài)課件或“粉筆 + 黑板”教學形式很難將算法的執(zhí)行過程動態(tài)地演示出來,影響了教學效果?!稊?shù)據(jù)結(jié)構(gòu)算法動態(tài)演示設(shè)計》是使用專業(yè)編程技術(shù)實現(xiàn)算法的動態(tài)展示,使學生更直觀的從算法的設(shè)計思想、程序運行描述、程序運行結(jié)果同步跟蹤展示等全方位的了解算法,使學生能主動積極地學習和掌握應用這些算法。 </p><p&g
18、t;<b> 1.1課題研究背景</b></p><p> 隨著現(xiàn)代科學技術(shù)的迅猛發(fā)展,計算機技術(shù)已滲透到各個領(lǐng)域,成為各行業(yè)必不可少的工具,特別是Internet技術(shù)的推廣和信息高速公路的建立,使IT產(chǎn)業(yè)在市場競爭中越發(fā)顯示出其獨特的優(yōu)勢,步入數(shù)字化時代,有巨大的數(shù)據(jù)信息等待著加工處理和傳輸,這將現(xiàn)實的許多東西都進入虛擬的世界當中,這都需要計算機技術(shù)的支持。同樣的,學院的教學手段也在逐
19、步信息化,這使得計算機輔助教學CAI的出現(xiàn)成為一種必然的趨勢。</p><p> 90 年代以來, 隨著多媒體和Internet 網(wǎng)絡的出現(xiàn),計算機教育已步入一個全新的階段,計算機輔助教學CAI作為一種先進的教學手段正逐步滲透于各類院校的各個學科?!稊?shù)據(jù)結(jié)構(gòu)》不僅是大學計算機專業(yè)的核心課程之一,也是非計算機專業(yè)的主要選修課程之一。該課程涉及大量的概念、數(shù)據(jù)結(jié)構(gòu)和算法,理論性強又較為抽象,尤其是對算法描述的執(zhí)行過
20、程的理解是難點和重點。在課堂教學上,大量的算法不可能也無法一一詳述。運用計算機輔助教學系統(tǒng)——《數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)》可以使教學內(nèi)容化靜為動,調(diào)動學生的學習興趣;變難為易,提高學生學習興趣;使學生寓學于樂,培養(yǎng)學生的學習興趣,與此同時,利用計算機輔助教學還可以滿足學生的學習興趣。它已成為激發(fā)學生興趣的新方法、新手段。</p><p> 1.2國內(nèi)計算機輔助教學的現(xiàn)狀</p><p>
21、 隨著時代的進步,電子技術(shù)的飛速發(fā)展,全球網(wǎng)絡化進程的加快,社會各行各業(yè)中都應用到了計算機這種現(xiàn)代技術(shù)工具,目前我國的教育領(lǐng)域也已經(jīng)開始運用計算機輔助教學(Computer-Assisted Instruction,以下簡稱CAI)這一現(xiàn)代化教學手段進行教育教學。</p><p> 作為一種媒體,計算機與其他教學媒體(如黑板、教科書、投影儀、電視機、錄像機等)沒有什么不同,能夠幫助教師提高教學效果、擴大教學范
22、圍、延伸教師的教育功能。 課堂教學,在今天和今后相當長的歷史時期中,仍然是學校教學活動的主要場所,因此計算機輔助教學(CAI)作為一種現(xiàn)代化的教學技術(shù),將集中體現(xiàn)在課堂教學中。計算機輔助教學是利用計算機作為主要的教學媒體來進行教學活動,即利用計算機來輔助教師執(zhí)行教學。計算機不僅能呈現(xiàn)單純的文字、數(shù)字等字符教學信息,而且還能。輸出動畫、視頻、圖像和聲音,能非常容易做到教學信息的圖、文、聲并茂,這種多維立體的教育信息傳播,增強了信
23、息的真實感和表現(xiàn)力。另外,計算機作為教學媒體,學生可利用一定的輸入、輸出設(shè)備,通過人機“對話”的方式進行學習,這種人機交互作用是計算機媒體所特有的。</p><p> 計算機輔助教學的作用。多年以來,我們的教學工作一般都是教師用黑板板書,用口頭說教;學生用筆記錄,用耳朵聽講,所以,教師和學生都形成了一定的思維定勢。隨著時代的發(fā)展和科學技術(shù)的進步,人類的教育水平及教育手段也在不斷的提高。電化教育已滲透到各個學科當
24、中,近30年來,計算機輔助教學(CAI)興起,利用計算機來幫助教師執(zhí)行教學功能,老師運用計算機輔助教學的手段,采用計算機多媒體教學方法,成為激發(fā)學生興趣的新方法。如教師在教學中,可以運用計算機來呈現(xiàn)教學計劃、教學內(nèi)容、記錄學生的學習情況和控制學習進程等;教師可以在教學中根據(jù)本學科的特點,制作各種課件、軟件,使整個課堂從原來抽象、死板的氛圍轉(zhuǎn)到生動、活躍起來,把教師的主導性和學生的主體性充分發(fā)揮出來[16]。</p><
25、;p> 傳統(tǒng)的教學方法正在逐步向現(xiàn)代化計算機輔助教學方向發(fā)展。但目前,計算機輔助教學還屬于起步階段,很多工作還需要進一步開展。目前我國經(jīng)濟欠發(fā)達地區(qū)還沒有開展計算機輔助教學,還有一些教育工作者對計算機普及教育以及運用計算機改革傳統(tǒng)教學的興趣不濃,積極性不高,為此,應從提高認識入手,著力從教育系統(tǒng)內(nèi)部的觀念更新向全社會教育觀念更新推進。</p><p> 1.3計算機輔助教學的發(fā)展趨勢</p>
26、<p> 目前我國已認識到計算機輔助教學在教育教學中的重要作用,無論是從經(jīng)濟上還是在教師培訓上都在采用積極的態(tài)度:對CAI軟件的開發(fā)作理論上、技術(shù)上和應用方面的深入研究,是促進CAI不斷發(fā)展的基礎(chǔ)工作,此方面已給予充分重視。同時也正在不斷地解決CAI軟件使用中的問題,其中教師的培訓是一個關(guān)鍵。不僅要使教師掌握CAI軟件的具體的使用方法,更重要的是觀念的轉(zhuǎn)變,以教學改革促進CAI的應用,反之又通過CAI的應用促進教學改革。
27、CAI是在教育教學改革中產(chǎn)生和發(fā)展起來的,它本身帶有鮮明的革新品格。用傳統(tǒng)的方法、其它的媒體,甚至人類教師本身無法或難以實現(xiàn)的目標,通過計算機資源的合理應用,將使問題得到圓滿地解決。因此,明確CAI軟件的研究和應用的根本目的在于改革教學、提高學生的培養(yǎng)質(zhì)量,而不在于為了形式上的使用,把研究、應用和教師培訓有機地結(jié)合起來,以研究促進應用,反過來又以應用促進研究,使其形成互動機制,是保證CAI發(fā)展的正確途徑。計算機輔助教學的發(fā)展趨勢是:一是
28、網(wǎng)絡化。網(wǎng)絡化進程的加快,信息資源無比豐富,我們可以利用網(wǎng)絡資源來制作自己的軟件和課件;視頻技術(shù)在教學中的應用,我們可以把自己優(yōu)秀的課例通過視頻編</p><p> 1.4系統(tǒng)建設(shè)的目的</p><p> 科學技術(shù)越向前發(fā)展,人們越容易操作和駕馭。計算機技術(shù)的迅速發(fā)展必將推動CAI向著更先進、更高水平的方向發(fā)展,在教育領(lǐng)域最終實現(xiàn)人——機之間的交互,對我國的教育事業(yè)最終起到大大的推動作
29、用。計算機輔助教學系統(tǒng)——《數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)》建設(shè)的目的有以下幾點:</p><p> 該系統(tǒng)可以使學員深入理解教材內(nèi)容、掌握基本的數(shù)據(jù)結(jié)構(gòu)及相應算法的實現(xiàn)過程有很好的幫助作用。</p><p> 該系統(tǒng)不僅能呈現(xiàn)單純的文字、數(shù)字等字符教學信息,而且還能輸出動畫、視頻、圖像和聲音,能非常容易做到教學信息的圖、文、聲并茂,這種多維立體的教育信息傳播,增強了信息的真實感和表現(xiàn)力。&
30、lt;/p><p> 該系統(tǒng)可以使教學內(nèi)容化靜為動,調(diào)動學生的學習興趣;變難為易,提高學生學習興趣;使學生寓學于樂,培養(yǎng)學生的學習興趣,與此同時,可以滿足學生的學習興趣。</p><p> 根據(jù)以上3點可知該系統(tǒng)的建設(shè)是非常必要的。</p><p><b> 本章小結(jié)</b></p><p> 本章重點介紹了“基于C
31、#多線程技術(shù)的數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)”該課題的研究背景、國內(nèi)計算機輔助教學系統(tǒng)的現(xiàn)狀和發(fā)展趨勢以及建設(shè)該系統(tǒng)的目的。</p><p><b> 需求分析</b></p><p> 所謂需求分析是指研究問題域,產(chǎn)生一個滿足用戶需求的系統(tǒng)模型。這個系統(tǒng)模型應能正確地描述問題域和系統(tǒng)責任,并使后續(xù)開發(fā)階段的有關(guān)人員能根據(jù)這個模型繼續(xù)進行工作。</p>&
32、lt;p> 2.1功能性需求分析</p><p> 本系統(tǒng)是一個動態(tài)演示數(shù)據(jù)結(jié)構(gòu)算法執(zhí)行過程的輔助教學軟件,它可適應讀者對算法的輸入數(shù)據(jù)和過程執(zhí)行的控制方式的不同需求,在計算機的屏幕上顯示算法執(zhí)行過程中數(shù)據(jù)的邏輯結(jié)構(gòu)或存儲結(jié)構(gòu)的變化狀況或遞歸算法執(zhí)行過程中棧的變化狀況。整個系統(tǒng)使用菜單驅(qū)動方式, 每個菜單包括若干菜單項。每個菜單項對應一個動作或一個子菜單。系統(tǒng)一直處于選擇菜單項或執(zhí)行動作狀態(tài),直到選擇了
33、退出動作為止[5]。</p><p><b> 2.1.1系統(tǒng)需求</b></p><p> 經(jīng)過對數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)的基本需求分析后,該系統(tǒng)至少具備以下功能:</p><p> 可以動態(tài)演示順序表;</p><p><b> 可以動態(tài)演示鏈表;</b></p><
34、p> 可以動態(tài)演示二叉樹遍歷;</p><p> 可以動態(tài)演示二叉樹線索化;</p><p> 可以動態(tài)演示赫夫曼樹;</p><p> 可以動態(tài)演示拓撲排序;</p><p> 可以動態(tài)演示內(nèi)部排序;</p><p> 可以顯示C語言編寫的核心代碼;</p><p><
35、b> 可以顯示變量;</b></p><p><b> 可以跟蹤變量;</b></p><p> 可以顯示算法設(shè)計思想;</p><p> 可以暫停正在執(zhí)行的系統(tǒng);</p><p> 可以將暫停了的系統(tǒng)繼續(xù)執(zhí)行;</p><p> 可以返回上一級菜單;</p&g
36、t;<p><b> 可以跟蹤代碼;</b></p><p> 可以恢復到演示的開始;</p><p><b> 可以重新設(shè)置數(shù)據(jù);</b></p><p> 可以顯示變動態(tài)畫面。</p><p> 上面每一行描述了一個功能,這種表達有利于測試需求的定義,因為每一行描述的功能
37、都是單獨可測的。由于分析設(shè)計是一個迭代的軟件開發(fā)過程,所以需求也會在分析設(shè)計過程中不斷的補充、細化。上述的需求只是初步的基本需求,還有待不斷地細化、完善。</p><p> 2.1.2識別參與者和用例</p><p> 通過分析數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)的功能需求,由于它是一個單機版的系統(tǒng),因此可識別出1個參與者,那就是操作該系統(tǒng)的人——操作者(OP)。</p><p
38、> 用例是什么?其原始英文是use case,直譯過來就成了用例。這也是一個比較貼切的叫法了,從字面的直接理解就是使用的例子。另一種比較流行的定義是用例就是與使用者(actor)交互的,并且給使用者提供可觀測的有意義的結(jié)果的一系列活動的集合。最具普遍意義的理解錯誤是認為用例就是功能的劃分和描述,認為一個用例就是一個功能點。在這種理解下,用例變成了僅僅是較早前需求中功能框圖的翻版,很多人用用例來劃分子系統(tǒng),功能模塊和功能點。如果這
39、樣,用例根本沒有存在的必要。</p><p> 如果用例不是功能的話,它是什么呢?從定義上說,能給使用者提供一個執(zhí)行結(jié)果的活動,不就是功能嗎?我的回答是:錯!功能是計算機術(shù)語,它是用來描述計算機的,而非定義需求的術(shù)語。功能實際描述的是輸入-->計算-->輸出。這讓你想到了什么?DFD圖?這可是典型的面向過程分析模式。實際上,把用例解釋為某個參與者(actor)要做的一件事可能更為合適。</p&
40、gt;<p> 上面已經(jīng)識別出了參與者,通過對需求的進一步分析,可以確定系統(tǒng)中有如下用例存在:</p><p> show sqList(演示順序表)</p><p> 本用例提供了演示順序表的插入和刪除的功能</p><p> show linkList(演示鏈表)</p><p> 本用例提供了演示鏈表的創(chuàng)建、插入
41、和刪除的功能。</p><p> show OrderTree(演示二叉樹遍歷)</p><p> 本用例提供了演示二叉樹先序、中序和后序遍歷的功能。</p><p> show ThreTree(演示二叉樹線索化)</p><p> 本用例提供了演示二叉樹先序、中序和后序線索化的功能。</p><p> 由
42、于用例(3)和(4)有公共行為,因此可以抽象出一個父用例“create Tree”。</p><p> create Tree(創(chuàng)建二叉樹)</p><p> 本用例描述了創(chuàng)建二叉樹的通用行為,是用例(3)和(4)的父用例。</p><p> show HuffmanCode(演示赫夫曼樹)</p><p> 本用例提供了演示赫夫曼樹
43、創(chuàng)建的功能。</p><p> show TopoSort(演示拓撲排序)</p><p> 本用例提供了演示拓撲排序的功能。</p><p> show Sort(演示內(nèi)部排序)</p><p> 本用例提供了演示內(nèi)部排序中的希爾排序和快速排序的功能。</p><p> 系統(tǒng)的用例圖如圖2.2所示,參與者“
44、OP”與“show sqList”、“ show linkList”、“ show OrderTree“、”show ThreTree“、“create Tree”、”show HuffmanCode“、”show TopoSort“、”show Sort“交互。</p><p> 圖2.2 系統(tǒng)用例圖</p><p> 2.1.3用例的事件流描述</p><p&
45、gt; 用例的事件流是對完成用例行為所需的事件的描述[4]。事件流描述了系統(tǒng)作什么,而不是描述系統(tǒng)應該怎么做。下面對前面識別出的用例逐個進行描述。</p><p> show sqList(演示順序表)</p><p> show linkList(演示鏈表)</p><p> show OrderTree(演示二叉樹遍歷)</p><p
46、> show ThreTree(演示二叉樹線索化)</p><p> show HuffmanCode(演示赫夫曼樹)</p><p> show TopoSort(演示拓撲排序)</p><p> show Sort(演示內(nèi)部排序)</p><p> 2.2非功能性需求分析</p><p><b
47、> 2.2.1設(shè)計思想</b></p><p> 課件是教學內(nèi)容和教學處理兩大類信息的有機結(jié)合,其目的是按某種學習理論和教學策略將教學中的重點和難點,教學上不容易講清楚的內(nèi)容借助計算機演示。CAI 系統(tǒng)在注重教學先進性、科學性的同時更強調(diào)實用性。開發(fā)滿足以下原則:</p><p> 內(nèi)容覆蓋面寬:系統(tǒng)應覆蓋該課程的主要內(nèi)容,并結(jié)合課程選用教材,用C語言來描述數(shù)據(jù)結(jié)構(gòu)
48、的算法。</p><p> 功能實用化:為了能真正起到輔助教學的效果,系統(tǒng)使用多種演示手段如用單步跟蹤、連續(xù)執(zhí)行和跨越函數(shù)(或過程) 調(diào)用等方式來演示算法的具體執(zhí)行過程,且演示方式可隨時更換;演示的速度可隨時調(diào)節(jié)。</p><p> 人機交互界面友好性:系統(tǒng)界面設(shè)計遵循實用、方便的原則,各種操作簡潔明了。同時具備鼠標接口和鍵盤接口,可接受來自于鼠標或鍵盤的輸入;為了加深對算法的理解,允
49、許用戶通過輸入不同的初始數(shù)據(jù)來觀察算法的具體執(zhí)行情況。</p><p> 中文字幕提示:系統(tǒng)演示插入了適當?shù)恼f明及注釋信息,以幫助系統(tǒng)使用者對演示過程的理解;為滿足不同層次用戶的需求,各種提示信息用中文給出。</p><p> 系統(tǒng)運行環(huán)境及可靠性:在保證系統(tǒng)功能的前提下,適當?shù)亟档土讼到y(tǒng)對運行環(huán)境的要求,以便系統(tǒng)可以在較低的配置系統(tǒng)軟件環(huán)境中正常運行。對于各種有意或無意的錯誤操作及錯
50、誤的輸入數(shù)據(jù),系統(tǒng)能正確處理,保證系統(tǒng)不會意外終止。</p><p> 2.2.2可行性分析</p><p><b> 技術(shù)可行性研究</b></p><p> 在IT行業(yè)中從業(yè)的工作人員一般都要求懂計算機,具有一定軟硬件基礎(chǔ),會使用各種管理軟件,熟悉IT產(chǎn)品。因為該系統(tǒng)是針對數(shù)據(jù)結(jié)構(gòu)算法的進行動態(tài)的演示,使學生更能理解算法和培養(yǎng)學生的興
51、趣。又因為學數(shù)據(jù)結(jié)構(gòu)這門課的老師和學生一般都是計算機專業(yè)的學生,所以在新系統(tǒng)投入使用時,用戶都能很快地使用該系統(tǒng)。</p><p><b> 操作可行性研究</b></p><p> 本系統(tǒng)采用Windows圖形界面,是大家熟悉的操作系統(tǒng),對于用戶只需要具有一般的計算機知識的人員都可以輕松上手。而且整個系統(tǒng)采用最友好的交互界面,簡潔明了,不需要對數(shù)據(jù)庫的了解。由此
52、,該系統(tǒng)的操作是可行的,有必要推廣該系統(tǒng)!</p><p> 綜合以上二方面,該系統(tǒng)具有很高的開發(fā)可行性,無論是從技術(shù)上還是操作上。</p><p><b> 本章小結(jié)</b></p><p> 本章重點介紹了基于C#多線程技術(shù)的數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示系統(tǒng)功能性需求分析和非功能性需求分析。前者主要是對系統(tǒng)需求、系統(tǒng)總體結(jié)構(gòu)圖、用例的事件流描
53、述和用例圖進行分析,后者主要描述了系統(tǒng)的設(shè)計思想和可行性分析。</p><p><b> 系統(tǒng)詳細設(shè)計</b></p><p> 3.1系統(tǒng)總體結(jié)構(gòu)圖</p><p> 根據(jù)系統(tǒng)的需求,將系統(tǒng)劃分為圖2.1的結(jié)構(gòu)圖:</p><p> 圖3.1 系統(tǒng)結(jié)構(gòu)圖</p><p><b>
54、; 3.2靜態(tài)結(jié)構(gòu)模型</b></p><p> 進一步分析系統(tǒng)需求,識別出類以及類之間的關(guān)系,確定它們的靜態(tài)結(jié)構(gòu)和動態(tài)行為,是面向?qū)ο蠓治龅幕救蝿铡O到y(tǒng)的靜態(tài)結(jié)構(gòu)模型主要用類圖或?qū)ο髨D來描述[8]。</p><p> 3.2.1定義系統(tǒng)對象類</p><p> 定義過系統(tǒng)需求,就可以根據(jù)系統(tǒng)需求來識別系統(tǒng)中所存在的對象[7]。系統(tǒng)對象的識別可
55、以通過尋找系統(tǒng)域描述和需求描述中的名詞來進行,從前述的系統(tǒng)需求的描述中可以找到的名詞有順序表(sqList)、鏈表(linkList)、二叉樹遍歷(OrderTree)、二叉樹線索化(ThreTree)、赫夫曼樹(HuffmanCode)、拓撲排序(TopoSort)、內(nèi)部排序(Sort),這些都是對象圖中的候選對象,判斷是否應該為這些候選對象創(chuàng)建類的方法是:是否有與該對象相關(guān)的身份和行為?如果答案是肯定的,那么候選對象應該是一個存在與
56、模型中的對象,就應該為之創(chuàng)建類。</p><p> 順序表(sqList)</p><p> 順序表是沒有身份的,但它具有相關(guān)的行為,系統(tǒng)要創(chuàng)建順序表,可以演示順序表的插入和刪除。所以順序表是系統(tǒng)中的一個類,類名為sqList。</p><p> 鏈表(linkList)</p><p> 鏈表是沒有身份的,但它具有相關(guān)的行為,系統(tǒng)要
57、,可以演示鏈表的創(chuàng)建、插入和刪除。所以鏈表是系統(tǒng)中的一個類,類名為linkList。</p><p> 二叉樹遍歷(OrderTree)</p><p> 二叉樹遍歷是沒有身份的,但它具有相關(guān)的行為,系統(tǒng)要創(chuàng)建二叉樹,可以演示二叉樹的先序、中序和后序遍歷。所以二叉樹遍歷是系統(tǒng)中的一個類,類名為OrderTree。</p><p> 二叉樹線索化(ThreTre
58、e)</p><p> 二叉樹線索化是沒有身份的,但它具有相關(guān)的行為,系統(tǒng)要創(chuàng)建二叉樹,可以演示二叉樹的先序、中序和后序線索化。所以二叉樹線索化是系統(tǒng)中的一個類,類名為ThreTree。</p><p> 赫夫曼樹(HuffmanCode)</p><p> 赫夫曼樹是沒有身份的,但它具有相關(guān)的行為,可以演示赫夫曼樹的創(chuàng)建。所以赫夫曼樹是系統(tǒng)中的一個類,類名為
59、HuffmanCode。</p><p> 拓撲排序(TopoSort)</p><p> 拓撲排序是沒有身份的,但它具有相關(guān)的行為,系統(tǒng)要創(chuàng)建有向圖,可以演示拓撲排序。所以拓撲排序是系統(tǒng)中的一個類,類名為TopoSort。</p><p> 內(nèi)部排序(Sort)</p><p> 內(nèi)部排序是沒有身份的,但它具有相關(guān)的行為,可以演示希
60、爾排序和快速排序。所以內(nèi)部排序是系統(tǒng)中的一個類,類名為Sort。</p><p> 從上述分析,可以看出系統(tǒng)至少有7個重要的類:順序表(sqList)、鏈表(linkList)、二叉樹遍歷(OrderTree)、二叉樹線索化(ThreTree)、赫夫曼樹(HuffmanCode)、拓撲排序(TopoSort)、內(nèi)部排序(Sort)。接著要確定這些類的屬性和方法。</p><p><
61、b> 類sqList</b></p><p> transfer(string: str, sqList: &L ): void</p><p> 該函數(shù)方法將字符串轉(zhuǎn)化為數(shù)組存放。</p><p> ins_sqList(sqList: &L, char: x, int i): void</p><p&
62、gt; 該操作是順序表進行插入,以線性表,插入字符和位置作為參數(shù)。</p><p> del_sqList(sqList: &L, int i): void</p><p> 該操作是順序表進行刪除,以線性表,刪除的位置作為參數(shù)。</p><p><b> 類linkList</b></p><p>
63、crt_linkList(int: n, linkList: &L ): void</p><p> 創(chuàng)建一個單鏈表,以鏈表元素個數(shù)和鏈表作為參數(shù)。</p><p> ins_linkList(linkList: &L, char: x, int i): void</p><p> 該操作是鏈表進行插入,以鏈表,插入字符和位置作為參數(shù)。<
64、/p><p> del_linkList(sqList: &L, int i): void</p><p> 該操作是鏈表進行刪除,以鏈表,刪除的位置作為參數(shù)。</p><p> 類OrderTree</p><p> pre_Order(bt: bitree): void</p><p> 該操作是對二
65、叉樹進行先序遍歷。</p><p> in_Order(bt: bitree): void</p><p> 該操作是對二叉樹進行中序遍歷。</p><p> Post_Order(bt: bitree): void</p><p> 該操作是對二叉樹進行后序遍歷。</p><p><b> 類Th
66、reTree</b></p><p> pre_Thre(bt: bitree): void</p><p> 該操作是對二叉樹進行先序線索化。</p><p> in_ Thre (bt: bitree): void</p><p> 該操作是對二叉樹進行中序線索化。</p><p> Post
67、_ Thre (bt: bitree): void</p><p> 該操作是對二叉樹進行后序線索化。</p><p> 類HuffmanCode</p><p> HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n): void</p><p>
68、 該操作用于創(chuàng)建赫夫曼樹和赫夫曼樹編碼。</p><p><b> 類TopoSort</b></p><p> TopologicalSort(ALGRAPH G):void</p><p> 該操作用于拓撲排序。</p><p><b> 類Sort</b></p><
69、;p> ShellSort(int a[],int n):void</p><p> 該操作用于希爾排序。</p><p> QuickSort(int a[],int left,int right): void</p><p> 該操作用于快速排序。</p><p><b> 類bitree</b>&l
70、t;/p><p> Crt_Tree(bt: bitree): void</p><p> 該操作用于創(chuàng)建二叉樹。</p><p> 由于每一個算法的演示都要這些操作,因此把它抽象出一個類出來。類名為Demonstration。</p><p> 類Demonstration</p><p> 在確定類Demon
71、stration的屬性和方法時,應考慮如下需求:</p><p> 可以顯示C語言編寫的核心代碼</p><p> 在顯示時,應提供C語言編寫的核心代碼,因此,提供這個功能的操作定義應該如下:</p><p> ShowCode(str: string): void</p><p><b> 可以顯示變動態(tài)畫面</b&
72、gt;</p><p> 在顯示時,應提供動態(tài)畫面,因此,提供這個功能的操作定義應該如下:</p><p> ShowDemon(): void</p><p><b> 可以顯示變量</b></p><p> 在顯示時,應提供變量,因此,提供這個功能的操作定義應該如下:</p><p>
73、 ShowBL(str: string): void</p><p> 可以顯示算法設(shè)計思想</p><p> 在顯示時,應提供算法設(shè)計思想,因此,提供這個功能的操作定義應該如下:</p><p> ShowThink(str: string): void</p><p><b> 可以返回上一級菜單</b>&
74、lt;/p><p> 根據(jù)這個需求,定義如下操作:</p><p> Return():void</p><p><b> 可以重新設(shè)置數(shù)據(jù)</b></p><p> 根據(jù)這個需求,定義如下操作:</p><p> SetData(str: string) : void</p>
75、<p> 可以恢復到演示的開始</p><p> 根據(jù)這個需求,定義如下操作:</p><p> ReStart(): void</p><p> 可以暫停正在執(zhí)行的系統(tǒng)</p><p> 可以將暫停了的系統(tǒng)繼續(xù)執(zhí)行</p><p><b> 可以跟蹤代碼</b></
76、p><p><b> 可以跟蹤變量</b></p><p> 上述4個需求涉及到C#中線程部分,在定義系統(tǒng)類的時候就不多說了。因為在實現(xiàn)部分(第4章)會詳細說明。</p><p> 3.2.2定義用戶界面類</p><p> 用戶與系統(tǒng)需要交互,一個用戶友好的系統(tǒng)通常采用直觀的圖形化界面,因此需要定義系統(tǒng)的用戶界面類
77、。</p><p> 通過對系統(tǒng)的不斷分析和細化,可識別出如下界面類以及類的屬性和方法。</p><p> 用來建立動態(tài)模型的時序圖對于定義類、類的屬性和方法是很有幫助的,類圖和時序圖的建立是相輔相成的,因為時序圖中出現(xiàn)的消息基本上會成為類中的方法。</p><p><b> 類DemonGUI</b></p><p&
78、gt; DemonGUI是系統(tǒng)的主界面,系統(tǒng)的主界面上含有幾個按鈕,當選擇不同的按鈕時,系統(tǒng)可以執(zhí)行不同的操作。當程序退出時,主界面窗口關(guān)閉。</p><p><b> 私有屬性</b></p><p><b> 待定。</b></p><p><b> 公共方法</b></p>
79、<p> newDemonGUI():void</p><p><b> 創(chuàng)建系統(tǒng)主界面。</b></p><p> SqList():void</p><p> 當按下按鈕“順序表”時,該方法被調(diào)用。</p><p> LinkList():void</p><p> 當
80、按下按鈕“鏈表”時,該方法被調(diào)用。</p><p> orderTree():void</p><p> 當按下按鈕“二叉樹遍歷”時,該方法被調(diào)用。</p><p> threTree():void</p><p> 當按下按鈕“二叉樹線索化”時,該方法被調(diào)用。</p><p> huffmanCode():
81、void</p><p> 當按下按鈕“赫夫曼樹”時,該方法被調(diào)用。</p><p> topoSort():void</p><p> 當按下按鈕“拓撲排序”時,該方法被調(diào)用。</p><p> sort():void</p><p> 當按下按鈕“內(nèi)部排序”時,該方法被調(diào)用。</p><
82、;p> 類ListDialog</p><p> 界面類ListDialog是用來演示順序表和鏈表所需的對話框,其界面如圖3.2所示。當按下主窗口DemonGUI中的按鈕“順序表”或“鏈表”時,該對話框彈出。當按下“順序表”時,“鏈表相關(guān)操作“不可用,如果選擇“插入”,相對應的標簽改為“插入元素”和“插入位置”;如果選擇“刪除”,把對應的標簽改為“刪除位置” ,并把“插入元素”對應的編輯框變得不可用。當
83、按下“鏈表表”時,“順序表相關(guān)操作“不可用,如果選擇“插入”,相對應的標簽改為“插入元素”和“插入位置”;如果選擇“刪除”,把對應的標簽改為“刪除位置” ,并把“插入元素”對應的編輯框變得不可用;如果選擇“創(chuàng)建”,只有“建立數(shù)據(jù)”可用,其他都不可用。</p><p> 圖3.2 界面ListDialog</p><p><b> 私有屬性</b></p>
84、;<p><b> 待定。</b></p><p><b> 公共方法</b></p><p> newListDialog():void</p><p> 創(chuàng)建用于填寫順序表的插入、刪除和鏈表創(chuàng)建、插入、刪除信息的窗口。</p><p> ins_sqList(): voi
85、d</p><p> 當按下“順序表”,選擇“插入”時,該方法被調(diào)用。</p><p> del_sqList(): void</p><p> 當按下“順序表”,選擇“刪除”時,該方法被調(diào)用。</p><p> ins_linkList(): void</p><p> 當按下“鏈表”,選擇“插入”時,該方
86、法被調(diào)用。</p><p> del_linkList(): void</p><p> 當按下“鏈表”,選擇“刪除”時,該方法被調(diào)用。</p><p> crt_linkList():void</p><p> 當按下“鏈表”,選擇“創(chuàng)建”時,該方法被調(diào)用。</p><p> 類TreeDialog<
87、/p><p> 界面類TreeDialog是用來演示二叉樹的遍歷、線索化和拓撲排序所需的對話框,其界面如圖3.3所示。當按下主窗口DemonGUI中的按鈕“二叉樹遍歷”、“二叉樹線索化”或“拓撲排序”時,該對話框彈出。由于二叉樹的三種遍歷和三種線索化都差不多,因此,在這我就以中序遍歷和中序線索化為例。彈出的對話框根據(jù)所選的按鈕不同,form的標題也顯示不同,為“建立二叉樹”、“建立線索化二叉樹”或“輸入有向圖”。&
88、lt;/p><p> 圖3.3界面TreeDialog</p><p><b> 私有屬性</b></p><p><b> 待定。</b></p><p><b> 公共方法</b></p><p> newTreeDialog():void&l
89、t;/p><p> 用于創(chuàng)建二叉樹或線索化二叉樹的窗口。</p><p> in_ Order (): void</p><p> 當按下“二叉樹遍歷”,選擇“確定”時,該方法被調(diào)用。</p><p> in_ Thre (): void</p><p> 當按下“二叉樹線索化”,選擇“確定”時,該方法被調(diào)用。&
90、lt;/p><p> TopoSort (): void</p><p> 當按下“拓撲排序”,選擇“確定”時,該方法被調(diào)用。</p><p><b> 類HCDialog</b></p><p> 界面類HCDialog是用來演示赫夫曼樹所需的對話框,其界面如圖3.4所示。當按下主窗口DemonGUI中的按鈕“赫夫
91、曼樹”時,該對話框彈出。</p><p><b> 私有屬性</b></p><p><b> 待定。</b></p><p> 圖3.4界面HCDialog</p><p><b> 公共方法</b></p><p> newHCDialog
92、():void</p><p> 用于創(chuàng)建赫夫曼樹的窗口。</p><p> huffmanCode():void</p><p> 當按下按鈕“赫夫曼樹”,選擇“確定”時,該方法被調(diào)用。</p><p> 類SortDialog</p><p> 界面類HCDialog是用來演示內(nèi)部排序所需的對話框,其界面
93、如圖3.5所示。當按下主窗口DemonGUI中的按鈕“內(nèi)部排序”時,該對話框彈出。</p><p> 圖3.5界面SortDialog</p><p><b> 私有屬性</b></p><p><b> 待定。</b></p><p><b> 公共方法</b><
94、;/p><p> newSortDialog():void</p><p> 用于創(chuàng)建內(nèi)部排序的窗口。</p><p> ShellSort():void</p><p> 當按下按鈕“內(nèi)部排序”,選擇“希爾排序”時,該方法被調(diào)用。</p><p> QuickSort(): void</p>&l
95、t;p> 當按下按鈕“內(nèi)部排序”,選擇“快速排序”時,該方法被調(diào)用。</p><p><b> 類MainForm</b></p><p> 界面類MainForm是用于顯示各個算法的對話框。該對話框?qū)λ惴▌討B(tài)演示進行控制。詳細部分會在第4章說明。</p><p><b> 私有屬性</b></p>
96、;<p><b> 待定。</b></p><p><b> 公共方法</b></p><p> newMainForm():void</p><p> 用于創(chuàng)建演示的窗口。</p><p> ShowCode(): void</p><p> 當運
97、行MainForm時,該方法被調(diào)用。</p><p> ShowDemon(): void</p><p> 當運行MainForm時,該方法被調(diào)用。</p><p> ShowBL(): void</p><p> 當運行MainForm時,該方法被調(diào)用。</p><p> ShowThink(): voi
98、d</p><p> 當按下按鈕“設(shè)計思想“時,該方法被調(diào)用。</p><p> Return():void</p><p> 當按下按鈕“返回“時,該方法被調(diào)用。</p><p> SetData() : void</p><p> 當按下按鈕“數(shù)據(jù)“時,該方法被調(diào)用。</p><p&g
99、t; ReStart(): void</p><p> 當按下按鈕“恢復“時,該方法被調(diào)用。</p><p> Run():void</p><p> 當按下按鈕“執(zhí)行“時,該方法被調(diào)用。</p><p> Stopped():void</p><p> 當按下按鈕“暫停“時,該方法被調(diào)用。</p&g
100、t;<p><b> 3.2.3建立類圖</b></p><p> 識別出系統(tǒng)中的類后,還要識別出類間的關(guān)系,然后就可以建立類圖了。ListDialog、TreeDialog、HCDialog、SortDialog是DemonGUI的一部分,因此它們與類DemonGUI之間是組合關(guān)系,同理,MainFrom與類ListDialog、TreeDialog、HCDialog、S
101、ortDialog之間也是組合關(guān)系。sqList、linkList、Tree、HuffmanCode、TopoSort、Sort與類MainFrom之間是依賴關(guān)系。類OrderTree、ThreTree繼承了類bitree類間的關(guān)系如圖3.6所示。</p><p><b> 3.3動態(tài)行為模型</b></p><p> 系統(tǒng)的動態(tài)行為模型可以用交互作用圖、狀態(tài)圖和
102、活動圖來描述?;顒訄D強調(diào)了從活動到活動的控制流,而交互圖則強調(diào)從對象到對象的控制流,本人采用時序圖來描述為完成某個特定功能發(fā)生在系統(tǒng)對象之間的信息交換。</p><p> 描述本系統(tǒng)用例場景的時序圖如下:</p><p><b> 圖3.6系統(tǒng)類圖</b></p><p> “演示順序表”的時序圖如圖3.7所示:</p>&
103、lt;p> 圖3.7“演示順序表“的時序圖</p><p> 由于演示鏈表的時序圖和演示順序表的時序圖相類似,在此就不多畫了。演示鏈表的時序圖主要比演示順序表的時序圖多了一個創(chuàng)建部分。</p><p> “演示二叉樹遍歷“的時序圖,如圖3.8所示:</p><p> 圖3.8“演示二叉樹遍歷“的時序圖</p><p> “演示
104、二叉樹線索化“的時序圖,如圖3.9所示:</p><p> 圖3.9“演示二叉樹線索化“的時序圖</p><p> “演示赫夫曼樹“的時序圖,如圖3.10所示:</p><p> 圖3.10“演示赫夫曼樹“的時序圖</p><p> “演示拓撲排序“的時序圖,如圖3.11所示</p><p> 圖3.11“演
105、示拓撲排序“的時序圖</p><p> “演示內(nèi)部排序“的時序圖,如圖3.12所示</p><p> 圖3.12“演示內(nèi)部排序“的時序圖</p><p><b> 本章小結(jié)</b></p><p> 本章節(jié)主要是進一步對系統(tǒng)的功能性需求分析,將用戶的需求逐步轉(zhuǎn)化為代碼。從設(shè)計者的角度來設(shè)計系統(tǒng),畫出了系統(tǒng)中的靜態(tài)
106、結(jié)構(gòu)模型和動態(tài)行為模型。靜態(tài)結(jié)構(gòu)模型主要實現(xiàn)了定義系統(tǒng)對象類、定義用戶界面類和建立類圖。動態(tài)行為模型采用時序圖來實現(xiàn)。</p><p><b> 系統(tǒng)實現(xiàn)</b></p><p> 系統(tǒng)的核心部分是動畫演示、變量跟蹤和源代碼同步演示的實現(xiàn),由于每一個算法的演示都要求實現(xiàn)這部分,因此,在這我以演示鏈表的創(chuàng)建為例說明該部分的實現(xiàn)。</p><p&g
107、t;<b> 4.1多線程簡介</b></p><p> 首先介紹數(shù)據(jù)結(jié)構(gòu)算法動態(tài)演示的關(guān)鍵技術(shù)——c#的多線程技術(shù)。</p><p> 4.1.1線程、多線程概念</p><p> 線程(Thread)是線程控制(Thread Control)的簡寫,是程序中的一個執(zhí)行流。線程像進程一樣是動態(tài)的,也有一個從生成、生存到消亡的過程。但線
108、程是比進程更小的執(zhí)行單位,有時稱為輕量級進程(LWP——lightweight process) [1]。</p><p> 單線程(Single Thread)是指程序只含有單個執(zhí)行流。單個執(zhí)行流是指一個程序只有一條從頭到尾的執(zhí)行路線,即在程序執(zhí)行期間的任一時刻,僅有一個執(zhí)行點[1]。</p><p> 多線程(Muhithread)是指程序含有多個執(zhí)行流。多線程機制允許單個程序通過
109、建立多個并行執(zhí)行的線程來完成各自的任務。這些并行執(zhí)行的線程可以執(zhí)行相同的代碼,也可以執(zhí)行不同的代碼[1]。</p><p> 4.1.2實現(xiàn)多線程的方法</p><p> 在dotNET類庫中,System.Threading命名空間下包含了各種線程組件、接口來幫助程序員使用c#編寫多線程程序。在這個命名空間中最重要的就是Thread類,它是c#多線程程序設(shè)計的基礎(chǔ)。Thread類提供
110、了創(chuàng)建線程、控制線程的方法,它主要有以下幾種重要的成員:</p><p> 啟動線程:Start()</p><p> 終止線程:Abort()</p><p> 線程休眠:Sleep()</p><p> 掛起線程:Suspend()</p><p> 恢復線程:Resume()</p>&l
111、t;p> 具體的線程設(shè)計如下[2]:</p><p> public class AlgorithmThread//開始用戶自定義線程類AlgorithmThread.</p><p> {//類成員變量聲明處</p><p> public AlgorithmThread() </p><p><b> {//構(gòu)造
112、函數(shù)體</b></p><p> } //類AlgorithmThread的構(gòu)造函數(shù)</p><p> public void Run(){//定義線程體,以實現(xiàn)自定義線程類AlgorithmThread的功能</p><p> int i; String str;</p><p> for(i=0;i<=10;i+
113、+)</p><p><b> { </b></p><p> str ="Step number"+ i.ToString()+"executed"; </p><p> Thread.Sleep(500); /
114、/當前線程休眠(暫停)500ms </p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p> 主程序中建立和啟動線程: </p><p> public class m
115、ainForm</p><p><b> { </b></p><p> public delegate void DelegateStep(int s); </p><p> public void startAlgorithmThread()</p><p><b> { </b>&
116、lt;/p><p> m_algotithmThread=new Thread(new ThreadStart (this.ThreadFunction));</p><p><b> //創(chuàng)建線程實例 </b></p><p> m_algotithmThread.Start();//啟動線程,即調(diào)用ThreadFunction線程函數(shù)
117、 </p><p><b> } </b></p><p> private void ThreadFunction()</p><p><b> { </b></p><p><b> //線程函數(shù) </b></p>
118、<p> AlgorithmThread algorithmThread; </p><p> algorithmThread=new AlgorithmThread();</p><p> algorithmThread.run();//調(diào)用AlgorithmThread的run函數(shù),執(zhí)行線程體 </p>
119、;<p><b> }</b></p><p><b> } </b></p><p> 這樣就在主線程mainForm中建立并啟動了用戶自定義線程m_algotithmThread。 </p><p><b> 線程同步</b></p><p> 若
120、一個對象同時被多個其他線程訪問,則這多個線程之間在微觀上存在先后執(zhí)行順序的關(guān)聯(lián)關(guān)系,這就是線程同步。在C#里面用于實現(xiàn)線程同步的常用類有如下幾類:</p><p> Mutex類,Monitor類,lock方法。</p><p> Manual(Auto)ResetEvent類。</p><p> ReaderWriterLock類。</p>&
121、lt;p> c# Windows應用程序中,在窗體上顯示線程中處理的信息,需要在一個線程中引用另一個線程中的窗體控件。常用辦法是使用委托(delegate)完成這個工作,即在不是創(chuàng)建控件的線程中直接創(chuàng)建一個委托實例,調(diào)用控件對象的Invoke方法,并傳入需要的參數(shù),完成對其他線程中的控件的操作。</p><p> 4.2動態(tài)算法演示模板</p><p> 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)采
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)
- 畢業(yè)設(shè)計---數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)
- 軟件工程畢業(yè)論文-數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)的設(shè)計與實現(xiàn)
- c++數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)畢業(yè)設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--- 數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)
- (畢業(yè)論文)-數(shù)據(jù)結(jié)構(gòu)與算法實驗論文
- 數(shù)據(jù)結(jié)構(gòu)算法設(shè)計和演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)圖的算法的畢業(yè)論文
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)58165
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)及算法動態(tài)演示平臺設(shè)計與實現(xiàn).pdf
- 數(shù)據(jù)結(jié)構(gòu)精品課網(wǎng)站的設(shè)計畢業(yè)論文
- 計算機畢業(yè)論文數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 算法與數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)與算法
評論
0/150
提交評論