【正文】
promote student skills integrated applications and professional qualities.三、the concepts and terminologySystematic study of knowledge in the data structure before some of the basic concepts and terminology to give a precise meaning. Data (Data) is the information carrier, it could be puter identification, storage and processing. It is the puter processing of raw materials, a variety of data processing applications. Computer science, puter processing is the socalled data objects, which can be numerical data can be non numerical data. Numerical data are integer, the actual number or plural, mainly for engineering puting, scientific puting and mercial processing。通過(guò)四個(gè)月的畢業(yè)設(shè)計(jì),一個(gè)數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)可以說(shuō)是大體完成了。而她在我的畢業(yè)設(shè)計(jì)過(guò)程中給予了我熱情的幫助,從整個(gè)系統(tǒng)的需求分析、總體設(shè)計(jì)及某些細(xì)節(jié)之處到論文的撰寫都給予了具體指導(dǎo)。由于我是名新手,對(duì)制作一個(gè)這樣的完整的“數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)”有著許多的困難。問(wèn)題不足:(1)該系統(tǒng)相對(duì)復(fù)雜的演示系統(tǒng)稍顯簡(jiǎn)易,只實(shí)現(xiàn)了結(jié)構(gòu)的基礎(chǔ)操作,對(duì)復(fù)雜算法的演示比較少,如多項(xiàng)式運(yùn)算、最小生成樹等等;(2)在多數(shù)演示過(guò)程中,沒(méi)能實(shí)現(xiàn)單步演示。 算法說(shuō)明操作操作運(yùn)行如圖32所示。如果看不清楚鏈表數(shù)據(jù)與指針動(dòng)向的話,可以拉動(dòng)右下方控制條來(lái)調(diào)整顯示窗口的背景亮度 樹操作樹運(yùn)行如圖317 321 323所示輸入幾個(gè)數(shù)字就建立起二叉樹的結(jié)構(gòu),請(qǐng)?zhí)貏e注意數(shù)字的大小與左右連接的關(guān)系;當(dāng)輸入的時(shí)候下方會(huì)出現(xiàn)輸入值在樹的第幾層信息。單擊“加入”按紐以輸入數(shù)據(jù),連續(xù)建立7個(gè)鏈表結(jié)點(diǎn)后單擊“顯示”按紐,即得到右方圖示的內(nèi)容;輸入“數(shù)據(jù)五”單擊“查找”按紐,就得到數(shù)據(jù)5在第3結(jié)點(diǎn)的信息;單擊“刪除”按紐,即跳出刪除結(jié)點(diǎn)的畫面,列表顯示中也少了數(shù)據(jù)五。在操作面板中輸入內(nèi)容后,單擊“按紐”即可看到數(shù)據(jù)從前方插入。}// 4 系統(tǒng)操作 主菜單操作主菜單運(yùn)行如圖32所示。Memo2LinesText=。 }//void __fastcall TForm1::N13Click(TObject *Sender){Memo1LinesLoadFromFile()。主要顯示各種算法的說(shuō)明,輔助大家更好地學(xué)習(xí)。若限定先左后右,則只有前三種情況,分別稱之先序遍歷、中序遍歷和后序遍歷。遍歷對(duì)線性結(jié)點(diǎn)來(lái)說(shuō),是容易解決的,而對(duì)二叉樹則不然,由于二叉樹是一種非線性結(jié)構(gòu),每個(gè)結(jié)點(diǎn)都可能有兩課子樹,因而需要尋找一種規(guī)律,以便使二叉樹上的結(jié)點(diǎn)能排列在一個(gè)線性隊(duì)列上,從而便于遍歷。 i=WinExec((),SW_SHOWNORMAL)。對(duì)于一般二叉樹,則應(yīng)將其每個(gè)結(jié)點(diǎn)與完全二叉樹上的結(jié)點(diǎn)相對(duì)照,存儲(chǔ)在一維數(shù)組的相應(yīng)分量中,如圖319所示,二叉樹的順序存儲(chǔ)結(jié)構(gòu)如圖320所示,圖中以“0”表示不存在此結(jié)點(diǎn)。圖317數(shù)組二叉樹的顯示圖開始輸入內(nèi)容左子樹數(shù)字大小右子樹二叉樹形成結(jié)束圖318 數(shù)組二叉樹流程圖(2)在菜單中,我們通過(guò)調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來(lái)完成結(jié)構(gòu)二叉樹的演示。 在數(shù)組二叉樹的實(shí)現(xiàn)中,樹是由根莖和葉構(gòu)成,顧名思義樹狀結(jié)構(gòu)也具有這樣的組成特點(diǎn)的結(jié)構(gòu)形態(tài);然而必須注意在數(shù)據(jù)結(jié)構(gòu)中,樹的生長(zhǎng)方向是向下的,而且決定延伸的環(huán)節(jié)是由結(jié)點(diǎn)和線段所組成的。圖313和圖314分別顯示了刪除和插入結(jié)點(diǎn)時(shí)指針修改的情況。顧名思義,在雙向鏈表的結(jié)點(diǎn)中有兩個(gè)指針域,其一指向直接后繼,另一指向直接前趨。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。反之,如圖39所示在線性表中刪除元素b時(shí),為在單鏈表中實(shí)現(xiàn)元素a、b和c之間的邏輯關(guān)系的變化,僅需要修改結(jié)點(diǎn)a中的指針域即可。根據(jù)插入操作的邏輯定義,還需要修改結(jié)點(diǎn)a中的指針域,令其指向結(jié)點(diǎn)x,而結(jié)點(diǎn)x中的指針域應(yīng)指向結(jié)點(diǎn)b,從而實(shí)現(xiàn)3個(gè)元素a、b和x之間邏輯關(guān)系的變化。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素(這組存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的)。圖34 鏈表概念顯示圖 圖35 鏈表概念流程圖開始輸入數(shù)據(jù)選擇按紐顯示鏈表順序退出結(jié)束(2)在菜單中,我們通過(guò)調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來(lái)完成鏈表模型的演示。 i=WinExec((),SW_SHOWNORMAL)。幫助操作數(shù)據(jù)結(jié)構(gòu)程序線性表說(shuō)明圖說(shuō)明幫助關(guān)于樹說(shuō)明隊(duì)列說(shuō)明堆棧說(shuō)明圖樹堆棧和隊(duì)列線性表退出圖33 主菜單流程圖(3)控件介紹:C++ Builder的組件工具箱(Component Palette)提供各種制作組件的工具,包括文字標(biāo)簽、文本框、圖象組件等。主菜單、線性表、樹、操作四部分模塊的設(shè)計(jì)。程序模塊由退出組成。數(shù)據(jù)結(jié)構(gòu)模板由線性表、堆棧和隊(duì)列、樹、圖等四個(gè)部分組成。其中,他提到了使用TStringList作記錄的方法:先將錯(cuò)誤通過(guò)TStringList的Add方法加入到StringList里面,然后使用SaveToFile保存到硬盤上。E,()將返回捕獲到的產(chǎn)生異常的實(shí)際類名。在出現(xiàn)錯(cuò)誤時(shí),你會(huì)立刻知道錯(cuò)誤發(fā)生的位置。在代碼中每一個(gè)函數(shù)或是主要的函數(shù)中加入: try { //函數(shù)的代碼 } catch(Exception amp。一般來(lái)說(shuō),通過(guò)很多的bugs測(cè)試后(盡量折磨程序,看看它會(huì)不會(huì)崩潰),應(yīng)用程序在運(yùn)行是應(yīng)該不會(huì)出現(xiàn)什么錯(cuò)誤。通常,在運(yùn)行10分鐘左右之后,會(huì)使整個(gè)計(jì)算機(jī)的速度變慢!所以,如果希望在自己的記錄中能夠使用彩色和圖標(biāo),那么最好自己創(chuàng)建一個(gè)組件。Gexperts可以在 得到,它是免費(fèi)的。要使用dbugintf,它很容易被加入到你的工程中,加入include (要把它加入工程,然后會(huì)編譯它的pascal文件)。 第二個(gè)方法:使用了Gexperts,通過(guò) 。應(yīng)用程序在調(diào)試器進(jìn)程中運(yùn)行時(shí)OutputDebugString將用C字符串把調(diào)試器輸出的信息打印出來(lái)。 第一個(gè)方法:OutputDebugString。(比如:Windows NT服務(wù)程序,ISAPI/CGI程序,實(shí)時(shí)應(yīng)用程序等等)。) 就是這些了。這樣,你處理過(guò)的異常會(huì)再次被拋出,繼續(xù)尋找下一個(gè)catch語(yǔ)句來(lái)處理它。 這個(gè)機(jī)制還有更多的功能。為了讓這個(gè)機(jī)制更強(qiáng)大,C++Builder中還定義了catch(…)語(yǔ)句。Catch()語(yǔ)句里面可以指定一個(gè)要捕捉的類型或是變量,甚至可以用它來(lái)捕捉樹結(jié)構(gòu)或是繼承類的異常,如果捕捉了基類的異常,它就能捕捉到繼承這個(gè)基類的所有的類的異常。 C++Builder定義了try {} catch (…) {}機(jī)制。(比如說(shuō),你經(jīng)常檢查winapi函數(shù)的返回值嗎?)所以,出現(xiàn)問(wèn)題的可能性并不小。 (2)使用Exceptions和Exception的處理方法 除去一些少數(shù)的情況,開發(fā)人員不可能總是依靠于集成的調(diào)試工具。請(qǐng)想象一下,如果隨便掃視一眼代碼或注釋,就能立刻知道這段代碼的的作用,以及在寫代碼的時(shí)候?yàn)槭裁匆@樣寫,當(dāng)時(shí)的思路是什么,那么就可以節(jié)約大量時(shí)間。 BCB的調(diào)試程序的bugs越少,最終用戶對(duì)這個(gè)程序的評(píng)價(jià)越高。)而且有比較緊的期限限制,選C++Builder比較好。如果你開發(fā)系統(tǒng)底層的東西,需要極好的兼容性和穩(wěn)定性,選Visual C++吧。根據(jù) 你的需要做選擇吧。如果不使用MFC,目前又沒(méi)有合適的替代品。看來(lái)微軟雖然被判解體,開發(fā)實(shí)力可是一點(diǎn)沒(méi)打折扣。但愿對(duì)Inprise沖擊不會(huì)太大。)C++Builder是Inspires的旗艦產(chǎn)品之一,前景應(yīng)當(dāng)還是比較樂(lè)觀的,而且Inspires已經(jīng)在向Linux進(jìn)軍了,而微軟還遲遲沒(méi)有動(dòng)作,難道非要到Linux成燎原之勢(shì)(或許已經(jīng)成燎原之勢(shì)了)才會(huì)奮起占領(lǐng)這個(gè)新興市場(chǎng)?似乎他們對(duì)Linux的態(tài)度與幾年前對(duì)互聯(lián)網(wǎng)的興起的反應(yīng)遲緩有些相似。但I(xiàn)nspires的總體實(shí)力不及微軟,這也是無(wú)可爭(zhēng)議的。當(dāng)初Borland的Turbo C和Borland C++幾乎是唯一的選擇。希望Inprise能先解決同門兄弟的兼容性問(wèn)題。真是豈有此理,我很少看見(jiàn)軟件有不向下兼容的。但這只是可能。這是不應(yīng)該的。C++Builder的新版本雖然也提供了這一功能,但它的提示要等好幾秒才出來(lái),有時(shí)你不經(jīng)意間把鼠標(biāo)停在某一處,也要等硬盤響好幾秒,這可是在566Mhz的賽揚(yáng)II上呀。VC有ClassWizard、SourceBrowser等一系列工具,還附帶Visual SourceSafe、Visual Modeler等強(qiáng)大的工具,易用性非常好。不要小看了這一點(diǎn),很多專業(yè)程序員就是為這個(gè)選擇VC的。經(jīng)歷了那么多年的發(fā)展和完善,MFC功能非常全面,而且十分穩(wěn)定,bug很少。 C++Builder的VCL比Visual C++的MFC先進(jìn)的另一個(gè)特性是異常處理??磥?lái)在這方面VC要輸給C++Builder了。只要你有MFC庫(kù)的源代碼(隨VC企業(yè)版的光盤提供),你的MFC程序理論上用任何符合ANSI標(biāo)準(zhǔn)的編譯器均可編譯通過(guò)。而C++Builder對(duì)C++語(yǔ)言進(jìn)行了擴(kuò)展,以便引入組件、事件處理、屬性等新特性。(由于Windows的消息種類很多,開銷不算太小。)最自然的封裝方式是采用虛成員函數(shù)。(對(duì)Windows API的封裝就不用說(shuō)了吧。如果MFC青春永駐,微軟的開發(fā)人員也不會(huì)私自開發(fā)出基于ATL的WTL呀。MFC早在Windows ,那時(shí)的Visual C++還是16位的。Visual C++采用的框架是MFC。(7)其他特點(diǎn)C++ Builder還有很多新增的功能,如:針對(duì)Windows 98提供了PageScroller、MonthCalendar等Windows 98格式的新組件,并支持Windows98的多重屏幕顯示功能及Microsoft Office97格式的選擇選單和停駐式(docking)工具條。C++ Builder還提供了MTS 組件向?qū)?,用于快速生成支持Microsoft Transaction Server的COM組件。(5)強(qiáng)大的數(shù)據(jù)庫(kù)處理功能C++ Builder提供了對(duì)OracleMicrosoft SQLServer Informix Sybase、IBM DB 2 UniversalServer、InterBase 5。C++ Builder提供了21個(gè)Internet通信協(xié)議組件,用于Internet應(yīng)用程序的開發(fā)。通過(guò)MFC向?qū)?,還可以生成MFC的代碼框架。從而使用戶可以在原有系統(tǒng)基礎(chǔ)之上構(gòu)建跨平臺(tái)、跨程序語(yǔ)言的分布式應(yīng)用系統(tǒng)。圖2顯示了C++ Builder中建立CORBA對(duì)象的各種向?qū)?。C++ Builder可以說(shuō)是目前唯一同時(shí)支持CORBA和COM的C++集成開發(fā)環(huán)境,因此既適用于基于ORB的分布式開發(fā),又適用于基于COM的Windows開發(fā)。在編碼過(guò)程中,還可以使用CodeExplorer技術(shù)對(duì)源代碼進(jìn)行管理。和美國(guó)Inprise公司(原Borland公司)其他面向企業(yè)分布式系統(tǒng)的開發(fā)工具(如Delphi 、Jbuilder )相比,新近推出的最新版本C++ RAD(快速應(yīng)用開發(fā))工具――Borland C++ Builder 4,無(wú)論是在開發(fā)環(huán)境、分布式應(yīng)用系統(tǒng)開發(fā)、支持已有C++資源方面,還是在快速開發(fā)Web及Internet應(yīng)用程序、數(shù)據(jù)庫(kù)處理等方面,都表現(xiàn)出了其獨(dú)特的一面。操作由線性表說(shuō)明、堆棧說(shuō)明、隊(duì)列說(shuō)明、樹說(shuō)明、圖說(shuō)明組成,對(duì)各數(shù)據(jù)結(jié)構(gòu)的算法說(shuō)明。2 需求分析 解決問(wèn)題做為一個(gè)數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng),首先我們確定要演示的內(nèi)容,在本系統(tǒng)中,我們對(duì)線性表、堆棧和隊(duì)列、樹、圖幾個(gè)主要數(shù)據(jù)結(jié)構(gòu)做了講解;接著,對(duì)四種算法的說(shuō)明也是必不可少的,這樣配合演示,可以達(dá)到更好地效果;最后,作為我們?cè)O(shè)計(jì)的演示過(guò)程,使用者對(duì)操作不是太了解,我們有必要做個(gè)詳細(xì)的操作過(guò)程,讓使用者更好地操作系統(tǒng)。如果能夠把這門抽象的課程變得具體而生動(dòng),必將提高學(xué)習(xí)人員興趣,增加其積極性和主動(dòng)性,也有利于人員的對(duì)此課程的學(xué)習(xí)。數(shù)據(jù)結(jié)構(gòu)課程的主要目的是介紹一些常用的數(shù)據(jù)結(jié)構(gòu),闡明數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論它們?cè)谟?jì)算機(jī)中的存儲(chǔ)表示,并結(jié)