freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于c數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)(編輯修改稿)

2024-07-15 15:34 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 tch()語(yǔ)句捕捉到了錯(cuò)誤,后面的catch()語(yǔ)句將不會(huì)捕捉這條錯(cuò)誤。 這個(gè)機(jī)制還有更多的功能。如果你想處理異常,但是不想在處理的位置停止,那么可以重新拋出異常。這時(shí),程序?qū)⒗^續(xù)尋找下一個(gè)catch()語(yǔ)句來處理這個(gè)異常。這個(gè)方法和“throw”差不多。這樣,你處理過的異常會(huì)再次被拋出,繼續(xù)尋找下一個(gè)catch語(yǔ)句來處理它。 最后一個(gè)要說的是__finally(這不是標(biāo)準(zhǔn)的用法,是Borland添加的一個(gè)好方法),在__finally{}程序塊中代碼,無論是否發(fā)生異常都會(huì)被執(zhí)行。這是一個(gè)清理程序中使用new分配的本地變量,設(shè)置用作旗標(biāo)的變量值為正常的好位置。(比如,把一個(gè)等待狀態(tài)的光標(biāo)圖標(biāo)設(shè)置為正常光標(biāo)。) 就是這些了。有時(shí)間的話,請(qǐng)看看C++Builder幫助文件中的Exception類以及繼承Exception的類。這些將對(duì)于理解本節(jié)所說的內(nèi)容有很大幫助。 (3)使用記錄機(jī)制 不可能總是用調(diào)試器來調(diào)試代碼,在某些情況下,可能無法使用內(nèi)部集成的調(diào)試器,這時(shí)候,就不得不依靠其他手段調(diào)試程序了。(比如:Windows NT服務(wù)程序,ISAPI/CGI程序,實(shí)時(shí)應(yīng)用程序等等)。這時(shí)候,有經(jīng)驗(yàn)的程序員可能會(huì)借助古老的調(diào)試方法,例如,使用一些分類的記錄機(jī)制來確定程序?qū)嶋H運(yùn)行的過程。現(xiàn)在有一系列的方法可以簡(jiǎn)單的完成這樣的工作。下面將介紹3種方法。 第一個(gè)方法:OutputDebugString。(WinAPI: VOID OutputDebugString(LPCTSTR lpOutputString)。)很幸運(yùn),微軟徹底的實(shí)現(xiàn)了調(diào)試子系統(tǒng)。它包括的一些特點(diǎn)可能讓你想把自己的記錄系統(tǒng)扔掉。應(yīng)用程序在調(diào)試器進(jìn)程中運(yùn)行時(shí)OutputDebugString將用C字符串把調(diào)試器輸出的信息打印出來。如果程序沒有在調(diào)試器進(jìn)程中運(yùn)行,它將忽略這些調(diào)用。它會(huì)很好的在客戶的機(jī)器上運(yùn)行,不會(huì)彈出信息窗口。如果在發(fā)布給客戶的時(shí)候,忘記去掉這些代碼程序僅僅會(huì)變慢一點(diǎn),不會(huì)有別的不良后果。 第二個(gè)方法:使用了Gexperts,通過 。它是個(gè)可以稱之為偉大的程序,你可以把它分發(fā)給客戶。和OutputDebugString一樣,如果客戶沒有這個(gè)程序,它就根本什么也不作。(它會(huì)自動(dòng)檢測(cè)機(jī)器上是否安裝了客戶端)。要使用dbugintf,它很容易被加入到你的工程中,加入include (要把它加入工程,然后會(huì)編譯它的pascal文件)。然后,你就可以直接使用SendDebug(要送到記錄文件的字符串)。 或者,你需要它更機(jī)警一些,可以使用SendDebugEx(它給TMsgDlgType增加了一個(gè)新的消息類型)SendMethodEnter, SendMethodExit, SendSeparator等等(用法都差不多)。如果你打算給最終用戶分發(fā)客戶端 (),不要忘記include所需要的程序包。Gexperts可以在 得到,它是免費(fèi)的。 第三個(gè)方法:大概是最艱苦的方法,就是使用自己的記錄控制。這個(gè)方法可能不是想象的這么簡(jiǎn)單??赡苁紫葧?huì)想到“在窗體上扔一個(gè)RichEdit,把它設(shè)置為只讀的,然后往里面寫記錄”是這樣吧?理論上不錯(cuò),但是,實(shí)施起來…首先,使用RichEdit控件來做記錄,會(huì)大大降低應(yīng)用程序的速度,還會(huì)在內(nèi)存中造成碎片,甚至丟失內(nèi)存。通常,在運(yùn)行10分鐘左右之后,會(huì)使整個(gè)計(jì)算機(jī)的速度變慢!所以,如果希望在自己的記錄中能夠使用彩色和圖標(biāo),那么最好自己創(chuàng)建一個(gè)組件。如果沒有這么高的要求,那么有一個(gè)簡(jiǎn)單有效的方法,就是使用ListBox控件作記錄,把ListBox的Style屬性設(shè)置為lbOwnerDrawFixed,這樣句柄將會(huì)自繪。(Gexperts的控制臺(tái)就是用這樣的方法制作的)。 (4)將記錄和異常處理結(jié)合使用 不用總是擔(dān)心可能會(huì)發(fā)生什么偶然的異常。一般來說,通過很多的bugs測(cè)試后(盡量折磨程序,看看它會(huì)不會(huì)崩潰),應(yīng)用程序在運(yùn)行是應(yīng)該不會(huì)出現(xiàn)什么錯(cuò)誤。下面的這個(gè)技術(shù),建議組件開發(fā)者,在第一次把組件放在IDE環(huán)境測(cè)試的時(shí)候,很應(yīng)該遵守。一個(gè)在IDE中產(chǎn)生的異常會(huì)導(dǎo)致很多問題,甚至可能無法重新啟動(dòng)IDE也不能恢復(fù)。這個(gè)技術(shù)很簡(jiǎn)單。在代碼中每一個(gè)函數(shù)或是主要的函數(shù)中加入:   try   {    //函數(shù)的代碼   }   catch(Exception amp。E)   {   SendDebugMessage(“Exception caught in classname::functionname of type:” +() +” with the message:”+)。   }。 把字符串中classname 和 functionname 替換成相應(yīng)的類名和函數(shù)名。在出現(xiàn)錯(cuò)誤時(shí),你會(huì)立刻知道錯(cuò)誤發(fā)生的位置。這樣也就不至于強(qiáng)制重起IDE的了。 ClassName()給了什么樣的幫助呢?它只是用于返回字符串“Exception”嗎?每一次,E都被聲明為異常類型?這是VCL另一個(gè)優(yōu)秀的地方,所有的類都從Tobject繼承,所以,這些類都能自動(dòng)獲得正確的類型和基類的類型,所有的更多的信息都可以在這里找到。(請(qǐng)參見Tobject的幫助)所以,盡管使用了Exception amp。E,()將返回捕獲到的產(chǎn)生異常的實(shí)際類名。得到這些好處需要付出的代價(jià)是編譯出來的可執(zhí)行文件變大了一些。所有的Delphi/Cbuilder用戶都注意到了這一點(diǎn),但是說沒有付出就沒有收獲。在。其中,他提到了使用TStringList作記錄的方法:先將錯(cuò)誤通過TStringList的Add方法加入到StringList里面,然后使用SaveToFile保存到硬盤上。不過要注意在程序結(jié)束的時(shí)候不要忘記使用SaveToFile()方法把TStringList保存起來?;蛘?,也可以每次捕捉到異常之后都保存一次。 系統(tǒng)結(jié)構(gòu)主菜單模塊由數(shù)據(jù)結(jié)構(gòu)、操作、幫助、程序四個(gè)部分組成。數(shù)據(jù)結(jié)構(gòu)模板由線性表、堆棧和隊(duì)列、樹、圖等四個(gè)部分組成。線性表又分為鏈表概念、鏈表模型、鏈表操作、雙向鏈表四個(gè)部分,堆棧和隊(duì)列分為基本堆棧、基本隊(duì)列、循環(huán)隊(duì)列三個(gè)部分,樹分為數(shù)據(jù)二叉樹、結(jié)構(gòu)二叉樹、類二叉樹,圖分為圖表示、圖搜索、最短路徑。操作模板由線性表說明、堆棧說明、隊(duì)列說明、樹說明、圖說明組成。幫助模板由關(guān)于和幫助組成。程序模塊由退出組成。系統(tǒng)的功能模塊如圖31所示。本系統(tǒng)是由我與另外一個(gè)同學(xué)合作完成的,根據(jù)系統(tǒng)的結(jié)構(gòu),我們對(duì)各自的任務(wù)做了明確的分工。我在本系統(tǒng)中所做的工作是:詳細(xì)分析了系統(tǒng)需求,提出了系統(tǒng)設(shè)計(jì)方案,并進(jìn)行了論證;分析了RAD設(shè)計(jì)方法的利弊,并選定了設(shè)計(jì)方案。主菜單、線性表、樹、操作四部分模塊的設(shè)計(jì)。 鏈表概念 鏈表模型退出程序鏈表操作雙向鏈表線性表基本堆?;娟?duì)列堆棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu)循環(huán)隊(duì)列數(shù)組二叉樹樹結(jié)構(gòu)二叉樹操作二叉樹圖圖表示進(jìn)入系統(tǒng)線性表說明圖搜索最短路徑操作堆棧說明隊(duì)列說明樹說明圖說明關(guān)于幫助幫助圖31 系統(tǒng)模塊圖 詳細(xì)設(shè)計(jì) 主菜單(1)主菜單主要由一個(gè)菜單控件、一個(gè)顯示文本、三個(gè)按紐、二個(gè)可供長(zhǎng)文本輸入/出等七個(gè)控件組成。如圖32所示:圖32 主菜單的顯示圖(2)設(shè)計(jì)思想:開始作為一個(gè)演示系統(tǒng)的菜單,應(yīng)給人一個(gè)直觀的感覺,有個(gè)醒目的標(biāo)題,通過一個(gè)菜單控件,連接我們?cè)O(shè)計(jì)的各種數(shù)據(jù)結(jié)構(gòu)的算法演示;兩個(gè)文本輸入,用于對(duì)算法的說明,輔助使用者對(duì)算法的學(xué)習(xí);作為一個(gè)系統(tǒng),一個(gè)幫助模塊是不可缺少的。主菜單的流程圖如圖33所示。幫助操作數(shù)據(jù)結(jié)構(gòu)程序線性表說明圖說明幫助關(guān)于樹說明隊(duì)列說明堆棧說明圖樹堆棧和隊(duì)列線性表退出圖33 主菜單流程圖(3)控件介紹:C++ Builder的組件工具箱(Component Palette)提供各種制作組件的工具,包括文字標(biāo)簽、文本框、圖象組件等。在本系統(tǒng)中,用到了MainMenu(建立主菜單)、PopupMemu(建立彈出式菜單元件)、Label(在窗體上顯示文本信息的工具)、Edit(建立文本框的工具)、Memo(可以讓用戶輸入文字信息,功能較文字標(biāo)簽更多元化)、Button(在窗體上建立命令按紐組件,在窗體上單擊此按紐時(shí),可以執(zhí)行對(duì)應(yīng)的程序代碼)、ListBox(在窗體建立列表框組件,提供數(shù)據(jù)選項(xiàng))、ComboBox(它可建立下拉式列表,是列表框與文本框的組合)、ScrollBar(用來建立滾動(dòng)條組件)、GroupBox(在窗體上建立框架組件)、RadioGroup(建立選擇群組組件)、Panel(存放其他組件的容器組件)、ActionList(存放執(zhí)行動(dòng)作的組件);Bitbin(可有圖標(biāo)的按紐)、StingGrid(字符串)、Image(顯示圖象圖片)、Shape(基本圖形的建立)、Bevel(建立邊框面板)、TabControl(建立標(biāo)簽集)、ImageList(圖象序列)、RichEdit(多功能編輯)、StatusBar(狀態(tài)顯示)、Timer(時(shí)間時(shí)間控制)這些組件。 線性表模塊(1)在菜單中,我們通過調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來完成鏈表概念的演示。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。 i=WinExec((),SW_SHOWNORMAL)。 在鏈表概念的實(shí)現(xiàn)中,比較數(shù)組與鏈表的區(qū)別,兩者最明顯的差別在于存儲(chǔ)空間的配置上,數(shù)組是固定配置存儲(chǔ)空間,因此存取上受到限制,如果超過范圍則會(huì)產(chǎn)生無法預(yù)期的狀況。此程序是用一組地址連續(xù)的存儲(chǔ)單位依次存儲(chǔ)線性表的數(shù)據(jù)元素,以此實(shí)現(xiàn)線性表的順序存儲(chǔ)結(jié)構(gòu),這種存儲(chǔ)結(jié)構(gòu)的線性表叫順序表。如圖34所示。圖34 鏈表概念顯示圖 圖35 鏈表概念流程圖開始輸入數(shù)據(jù)選擇按紐顯示鏈表順序退出結(jié)束(2)在菜單中,我們通過調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來完成鏈表模型的演示。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。 i=WinExec((),SW_SHOWNORMAL)。 在鏈表模型的實(shí)現(xiàn)中,此程序是一個(gè)用c++類方式編寫的鏈表模型。線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素(這組存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的)。因此,為了表示每個(gè)數(shù)據(jù)元素與其直接后繼數(shù)據(jù)元素之間的邏輯關(guān)系,對(duì)數(shù)據(jù)元素來說,除了存儲(chǔ)其本身的信息之外,還需存儲(chǔ)一個(gè)指示其直接后繼的信息。根據(jù)以上思想,我設(shè)計(jì)該程序的運(yùn)行頁(yè)面如圖36所示。圖36 鏈表模型顯示圖開始輸入內(nèi)容選擇爭(zhēng)先奪后列席結(jié)束圖37 鏈表模型流程圖(3)在菜單中,我們通過調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來完成鏈表操作的演示。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。 i=WinExec((),SW_SHOWNORMAL)。 在鏈表操作的實(shí)現(xiàn)中,此程序是鏈表的基本操作模型,在這種存儲(chǔ)結(jié)構(gòu)中,容易實(shí)現(xiàn)線性表的某些操作, 在此程序中,我們重點(diǎn)實(shí)現(xiàn)了鏈表的插入和刪除。假設(shè)我們要在線性表的兩個(gè)數(shù)據(jù)元素a和b之間插入一個(gè)數(shù)據(jù)元素x,已知p為其鏈表存儲(chǔ)結(jié)構(gòu)中指向接點(diǎn)a的指針,如圖38(a)所示:ababxpps(a)(b)圖38 在單鏈表中插入結(jié)點(diǎn)時(shí)指針變化狀況為插入數(shù)據(jù)元素x,首先要生成一個(gè)數(shù)據(jù)域?yàn)閤的結(jié)點(diǎn),然后插入在單鏈表中。根據(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)系的變化。插入后的單鏈表如圖(b)所示。假設(shè)s為指向結(jié)點(diǎn)x的指針,則上述指針修改用語(yǔ)句描述即為:snext=pnext 。 pnext=s。反之,如圖39所示在線性表中刪除元素b時(shí),為在單鏈表中實(shí)現(xiàn)元素a、b和c之間的邏輯關(guān)系的變化,僅需要修改結(jié)點(diǎn)a中的指針域即可。假設(shè)p為指向結(jié)點(diǎn)a的指針,則上述指針修改用語(yǔ)句描述即為:pnext=pnextnext??梢?,在已知鏈表中元素插入或刪除的確切位置的情況下,在單鏈表中插入或刪除一個(gè)結(jié)點(diǎn)時(shí),僅需修改指針而不需要移動(dòng)元素。p圖39 在單鏈表中刪除結(jié)點(diǎn)時(shí)指針變化狀況abc根據(jù)插入和刪除的思想,我設(shè)計(jì)出了此程序的運(yùn)行界面如圖310所示:圖310鏈表操作顯示圖開始輸入內(nèi)容選擇按紐顯示鏈表輸入一個(gè)數(shù)據(jù)選擇按紐查找刪除清除結(jié)束圖311 鏈表操作流程圖 (4)在菜單中,我們通過調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來完成雙向鏈表的演示。源代碼如下: NewFileName=ExtractFilePath(ApplicationExeName)+。 i=WinExec((),SW_SHOWNORMAL)。 以上討論的鏈表存儲(chǔ)結(jié)構(gòu)的結(jié)點(diǎn)中只有一個(gè)指示直接后繼的指針域的指針域,因此,從某個(gè)結(jié)點(diǎn)結(jié)點(diǎn)出發(fā)只能順指針往后尋查其他結(jié)點(diǎn)。若要尋查結(jié)點(diǎn)的直接后趨,則需從表頭指針出發(fā),為了克服單鏈表這種單向性的缺點(diǎn),可利用雙向鏈表。顧名思義,在雙向鏈表的結(jié)點(diǎn)中有兩個(gè)指針域,其一指向直接后繼,另一指向直接前趨。和單鏈表的循環(huán)表相似,雙向鏈表也可
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1