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

正文內(nèi)容

c數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)(doc畢業(yè)設(shè)計(jì)論文)-在線(xiàn)瀏覽

2024-08-08 08:22本頁(yè)面
  

【正文】 中的一個(gè)元素。RichEdit組件,只要能夠把設(shè)置缺省字符格式DefAttributes、設(shè)置選中字符格式SelAttributes與設(shè)置段落Paragraph三個(gè)屬性掌握好就差不多了,因?yàn)樗钠渌鼘傩耘cMemo差不多。而開(kāi)發(fā)人員事先對(duì)bugs的處理越多,最終用戶(hù)能提供的關(guān)于bugs的信息就越多,也越準(zhǔn)確,這樣,開(kāi)發(fā)人員在接到最終用戶(hù)反映之后,就能夠快速找到出現(xiàn)bugs的那部分代碼,并以最快速度發(fā)布程序的升級(jí)包。易讀的代碼是很有價(jià)值的。這樣的代碼,在寫(xiě)的時(shí)候可能會(huì)稍稍慢一些,不過(guò),當(dāng)你調(diào)試程序時(shí),就不會(huì)花上幾個(gè)小時(shí)來(lái)尋找bugs,相反,你可以快速,簡(jiǎn)單的完成除錯(cuò)工作。所以,在寫(xiě)程序的時(shí)候,應(yīng)該養(yǎng)成自己的風(fēng)格,或是讀一讀Scott的關(guān)于代碼風(fēng)格的文章。所以,學(xué)會(huì)用其它的方法來(lái)找到bugs是很重要的。在C++標(biāo)準(zhǔn)制定出來(lái)之前的黑暗日子里,在程序里面發(fā)出發(fā)生錯(cuò)誤的信號(hào),通常是通過(guò)返回錯(cuò)誤代碼完成的(現(xiàn)在這種方法仍然應(yīng)用于OLE技術(shù)和一些Winapi函數(shù)),這樣的處理方法很容易就會(huì)被忽略。由于以上的原因,我們需要一個(gè)這樣的機(jī)制,它能讓我們不能忽略這些錯(cuò)誤,而且,這個(gè)機(jī)制應(yīng)該能被我們控制和自定義的。需要一個(gè)特殊的錯(cuò)誤類(lèi)型嗎?簡(jiǎn)單,定義一個(gè)新的異常類(lèi)型就行了,然后拋出它。這和剛剛定義的異常機(jī)制的結(jié)構(gòu)很相似。要使用異常處理了,只要把要執(zhí)行的代碼放到try塊里面,為了讓程序知道出現(xiàn)異常后應(yīng)該做什么,還需要定義一個(gè)catch()或是__finally塊。{ /* 異常處理代碼/}這個(gè)機(jī)制很強(qiáng)大,甚至可以用它來(lái)捕捉樹(shù)結(jié)構(gòu)或是繼承類(lèi)的異常,如果捕捉了基類(lèi)的異常,它就能捕捉到繼承這個(gè)基類(lèi)的所有的類(lèi)的異常。所以,catch(Exceptionamp。為了讓這個(gè)機(jī)制更強(qiáng)大,C++Builder中還定義了catch(…)語(yǔ)句。還有更多的功能,可以添加更多的catch()語(yǔ)句,可以向使用if…else if…語(yǔ)句那樣使用它。 (3)使用記錄機(jī)制 不可能總是用調(diào)試器來(lái)調(diào)試代碼,在某些情況下,可能無(wú)法使用內(nèi)部集成的調(diào)試器,這時(shí)候,就不得不依靠其他手段調(diào)試程序了。這時(shí)候,有經(jīng)驗(yàn)的程序員可能會(huì)借助古老的調(diào)試方法,例如,使用一些分類(lèi)的記錄機(jī)制來(lái)確定程序?qū)嶋H運(yùn)行的過(guò)程。 (4)將記錄和異常處理結(jié)合使用 不用總是擔(dān)心可能會(huì)發(fā)生什么偶然的異常。下面的這個(gè)技術(shù),組件開(kāi)發(fā)者在第一次把組件放在IDE環(huán)境測(cè)試的時(shí)候,很應(yīng)該遵守。這個(gè)技術(shù)很簡(jiǎn)單。E)   {   SendDebugMessage(“Exception caught in classname::functionname of type:” +() +” with the message:”+)。 把字符串中classname 和 functionname 替換成相應(yīng)的類(lèi)名和函數(shù)名。這樣也就不至于強(qiáng)制重起IDE的了?;谏鲜龅腃++Builder的優(yōu)點(diǎn),以及和其他軟件的對(duì)比,所以我決定使用WindownsXP作為操作系統(tǒng)、C/C++做為開(kāi)發(fā)語(yǔ)言,C++,易于實(shí)現(xiàn)這個(gè)系統(tǒng),對(duì)于數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)和教學(xué)都是相當(dāng)合適的。其中:程序菜單部分由退出組成,完成系統(tǒng)的終止數(shù)據(jù)結(jié)構(gòu)菜單由線(xiàn)性表、堆棧和隊(duì)列、樹(shù)、圖等四個(gè)部分組成,也是此系統(tǒng)的核心部分,分別對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的四大部分。操作菜單由線(xiàn)性表說(shuō)明、堆棧說(shuō)明、隊(duì)列說(shuō)明、樹(shù)說(shuō)明、圖說(shuō)明組成,對(duì)各數(shù)據(jù)結(jié)構(gòu)進(jìn)行了簡(jiǎn)單說(shuō)明。 下圖為本算法演示系統(tǒng)的結(jié)構(gòu)圖:鏈表概念鏈表模型退出程序鏈表操作雙向鏈表線(xiàn)性表 基本堆?;娟?duì)列堆棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu)循環(huán)隊(duì)列數(shù)組二叉樹(shù)樹(shù)結(jié)構(gòu)二叉樹(shù)操作二叉樹(shù)圖圖表示進(jìn)入系統(tǒng)線(xiàn)性表說(shuō)明圖搜索最短路徑操作堆棧說(shuō)明隊(duì)列說(shuō)明樹(shù)說(shuō)明圖說(shuō)明關(guān)于幫助幫助圖31 系統(tǒng)模塊圖::主菜單位于窗體的標(biāo)題欄下面,而彈出式菜單則是當(dāng)鼠標(biāo)右擊某控件的時(shí)候自動(dòng)彈出來(lái)。(2) Handle屬性可以用來(lái)為菜單提供一個(gè)對(duì)Windows菜單句柄的訪問(wèn)。(4) Items屬性,該屬性提供了可以訪問(wèn)菜單選項(xiàng)元素的描述,用它可以來(lái)訪問(wèn)選項(xiàng)的各個(gè)信息。(5) Merge方法,將非MDI應(yīng)用程序中窗體的主菜單合并到另外一個(gè)窗體的主菜單。設(shè)計(jì)主菜單:(1) 單擊Standard組件中的TMainMenu,放到FORM框中;(2) 對(duì)其屬性進(jìn)行相應(yīng)的設(shè)置;(3) 單擊【文件】選項(xiàng)可以看到下拉了一個(gè)其子菜單,支持點(diǎn)擊其子菜單的話(huà)可以增加其子菜單選項(xiàng)。比如雙擊【退出】控件,加代碼如下:Void_fastcall TForm1::S1Click(TObject*Sender){ShowMessage(“選項(xiàng)中退出選項(xiàng)”)}現(xiàn)在主菜單已經(jīng)有個(gè)雛形了。TPopupMenu的主要屬性、方法和事件:(1) Alignment屬性,用來(lái)設(shè)置當(dāng)用戶(hù)右擊時(shí),彈出菜單顯示的位置,它的取值分別為:paLeft、paCenter、paRight,其含義分別為:彈出式菜單左上角位于鼠標(biāo)指針下(Alignment的默認(rèn)值)、彈出式彩旦中央位于鼠標(biāo)指針下、彈出式菜單右上角位于鼠標(biāo)指針下;(2) AutoPopup屬性,為T(mén)rue時(shí),當(dāng)用戶(hù)右擊控件的時(shí)候,自動(dòng)彈出菜單,True是AutoPopup的默認(rèn)值,為False時(shí),當(dāng)用戶(hù)右擊控件的時(shí)候,必須通過(guò)代碼來(lái)控制菜單的彈出,用Popup方法實(shí)現(xiàn)之;(3) Popup方法,用來(lái)將彈出式菜單顯示到屏幕上;(4) OnPopup事件,在菜單剛要顯示到屏幕上之前發(fā)生該事件。 圖32 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)界面圖其中“程序”下拉菜單有“退出”一項(xiàng);“數(shù)據(jù)結(jié)構(gòu)”中包括“線(xiàn)性鏈表”、“堆棧和隊(duì)列”、“樹(shù)”、“圖”等四項(xiàng);“操作”下拉菜單中包括“線(xiàn)性表說(shuō)明”、“堆棧說(shuō)明”、“隊(duì)列說(shuō)明”、“樹(shù)說(shuō)明”、“圖說(shuō)明”等五項(xiàng);“幫助”下拉菜單中包括“關(guān)于”和“幫助”兩項(xiàng)。當(dāng)選擇“數(shù)據(jù)結(jié)構(gòu)”“圖”“圖表示”時(shí),能打開(kāi)圖表示的算法模塊。在外觀上,我們選擇了菜單的結(jié)構(gòu)設(shè)計(jì),其中第一用做顯示說(shuō)明的對(duì)話(huà)框,下一個(gè)用來(lái)顯示修改說(shuō)明的對(duì)話(huà)框,以及在頂部設(shè)計(jì)了一條“歡迎使用數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)”的歡迎語(yǔ)。 棧是限定僅在表尾進(jìn)行插入或刪除操作的線(xiàn)性表。棧的修改是按后進(jìn)先出的原則進(jìn)行的,因此,棧又稱(chēng)為后進(jìn)先出的線(xiàn)性表(簡(jiǎn)稱(chēng)LIFO結(jié)構(gòu)),它的特點(diǎn)可用圖33來(lái)形象地表示。ana1a2……...棧底棧頂頂...出棧進(jìn)棧 圖33 棧的示意圖棧的基本操作算法描述如下:Status InitStack(SqStack amp。if(!)exit(overflow)。=STACK_INIT_SIZE。}//InitStack Status GettopLStack (Linkstack amp。e){//若棧不為空,則用e返回S的棧頂元素,并返回OK,否則返回ERROR.if(S==NULL) return ERROR。return(OK)。S,ElemType e){//插入元素e為新的棧頂元素if(=){//棧滿(mǎn),追加存儲(chǔ)空間=(ElemType*)realloc(,(+ STACKINCREMENT)*sizeof(ElemType))。//存儲(chǔ)分配失敗=+。}*++=e。}//status Pop(SqStack amp。e){ //若棧不為空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERRORif(==)return ERROR。return OK。 int Empty(SqStack S){//若棧為空,則返回0,否則返回1if(==) return (0)。else return (1)。} int Full(SqStack S){//若棧為滿(mǎn),則返回0,否則返回1if()= return (0)。else return (1)。步驟如下:打開(kāi)一個(gè)Form1,將其Caption設(shè)置為:“堆棧基本概念”,并分別在Form1中添加StringGrid1,11個(gè)Label標(biāo)簽,一個(gè)文本編輯框(Edit),兩個(gè)按鈕。根據(jù)以上的控件及其屬性值,設(shè)計(jì)了如圖34的界面: 圖34 堆棧界面圖在菜單中,我們通過(guò)調(diào)用WinExec函數(shù),以執(zhí)行外部命令的方式,來(lái)完成基本堆棧的演示。在初步編寫(xiě)完本程序后,在經(jīng)過(guò)幾次調(diào)試,堆棧的程序設(shè)計(jì)結(jié)構(gòu)就已經(jīng)設(shè)計(jì)好了,以下是窗體及控件的運(yùn)行結(jié)果: 圖35 進(jìn)棧操作 圖36 棧滿(mǎn)當(dāng)輸入的元素超過(guò)棧的存儲(chǔ)范圍時(shí),就會(huì)出現(xiàn)棧滿(mǎn)的情況,即top=base,如圖36所示 圖 37 堆棧取出圖 圖38??债?dāng)把棧內(nèi)的所有元素全部取出后,棧為空,即topbase=M,如圖38所示。在模塊左下的空白框里輸入堆棧內(nèi)容后,安“Enter”,接著系統(tǒng)自動(dòng)判斷棧是否滿(mǎn),當(dāng)棧滿(mǎn)時(shí),程序會(huì)顯示紅色的“FULL”,如果棧未滿(mǎn),可以繼續(xù)輸入元素到堆棧里。點(diǎn)擊結(jié)束退出該模塊。堆棧具有先進(jìn)后出的特性(First In Last Out),其輸入與輸出都在同一端,可以想象成是堆積木或洗碗盤(pán)一樣;于是利用BCB圖形用戶(hù)接口,設(shè)計(jì)出這個(gè)具有互動(dòng)效果的程序。它只允許在表的一端進(jìn)行插入,而在另一端刪除元素。假設(shè)隊(duì)列為Q=(a1,a2,…,an),那么,a1就是隊(duì)頭元素,an則是隊(duì)尾元素。圖310是隊(duì)列的示意圖。}隊(duì)空:int QueueEmpty ( LinkQueue *Q ) { return Qfront == NULL。 pdata = x。 if ( Qfront == NULL ) //空,創(chuàng)建第一個(gè)結(jié)點(diǎn) Qfront = Qrear = p。 //入隊(duì)Qrear =p。}出隊(duì):int DeQueue ( LinkQueue *Q, QueueData amp。 //判隊(duì)空 QueueNode *p = Qfront。 //保存隊(duì)頭的值 Qfront= Qfrontlink。 return 1。根據(jù)以上的算法思想,利用BCB文本輸入組件的特性,設(shè)計(jì)了如圖311的界面:圖311 隊(duì)列界面圖在編寫(xiě)完程序后,在經(jīng)過(guò)幾次調(diào)試,隊(duì)列的程序設(shè)計(jì)結(jié)構(gòu)就已經(jīng)設(shè)計(jì)好了,以下是窗體及控件的運(yùn)行結(jié)果:入隊(duì):如圖312在下邊的對(duì)話(huà)框輸入入隊(duì)的元素。 圖313 隊(duì)滿(mǎn) 出隊(duì):如圖314所示,點(diǎn)擊“取出”就可取出隊(duì)中元素,按照“先進(jìn)先出”的原則。 圖315 隊(duì)空隊(duì)列(Queue)也是有序列表(Order List),隊(duì)列具有先進(jìn)先出的特性(First In First Out),輸入與輸出在不同端,就好象辦事或買(mǎi)東西時(shí)排隊(duì)一樣。當(dāng)隊(duì)列在隊(duì)尾不能在繼續(xù)插入新元素時(shí),一個(gè)巧妙的辦法就是將順序隊(duì)列臆造為一個(gè)環(huán)狀的空間,如圖317所示,我們稱(chēng)之為循環(huán)隊(duì)列。隊(duì)頭指針進(jìn)1: front = (front+1) %maxsize。隊(duì)列初始化:front = rear = 0。隊(duì)滿(mǎn)條件:(rear+1) % maxsize == front。根據(jù)循環(huán)隊(duì)列的算法思想現(xiàn)設(shè)計(jì)如下:在循環(huán)隊(duì)列模塊中首先引入一個(gè)Shape控件模擬循環(huán)隊(duì)列,為能判斷隊(duì)列是空的還是滿(mǎn)的,設(shè)計(jì)了兩個(gè)標(biāo)簽“FULL”和“EMPTY”來(lái)顯示此時(shí)循環(huán)隊(duì)列的情況,再循環(huán)隊(duì)列滿(mǎn)了以后,考慮到是否要取代暫存數(shù)據(jù),設(shè)計(jì)了一個(gè)消息框,來(lái)提示用戶(hù)“是否要取代暫存數(shù)據(jù)”。根據(jù)以上的算法思想,利用BCB文本輸入組件的特性,設(shè)計(jì)了如圖318的界面: 圖318 循環(huán)隊(duì)列界面圖 最后,單擊窗體,再單擊對(duì)象檢測(cè)窗口的事件面板,找到OnPaint進(jìn)入程序編輯窗口,編輯程序代碼出來(lái),用以繪制循環(huán)隊(duì)列,此外還要對(duì)“加入”、“取出”等按鈕的事件進(jìn)行編碼,編碼后就具備了本系統(tǒng)的加入功能了。循環(huán)隊(duì)列的設(shè)計(jì)目的就是為了解決基本隊(duì)列空間浪費(fèi)的問(wèn)題,若要將數(shù)據(jù)往前移動(dòng)以騰空出空間,又需要花費(fèi)許多時(shí)間,如果將數(shù)據(jù)所占的空間取出,那么就不能重復(fù)利用了。二叉樹(shù)是每個(gè)結(jié)點(diǎn)最多有兩個(gè)子樹(shù)的有序樹(shù)。本系統(tǒng)設(shè)計(jì)了三種二叉樹(shù):數(shù)組二叉樹(shù):程序通過(guò)定義數(shù)組類(lèi)型來(lái)讀入數(shù)據(jù)結(jié)點(diǎn)元素,然后經(jīng)設(shè)計(jì)按照二叉排序樹(shù)格式輸出。源代碼如下:NewFileName=ExtractFilePath(ApplicationExeName)+。 結(jié)點(diǎn)輸入界面如下圖: 圖325 數(shù)組二叉樹(shù)界面
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1