二叉樹實(shí)驗(yàn)報(bào)告_第1頁(yè)
二叉樹實(shí)驗(yàn)報(bào)告_第2頁(yè)
二叉樹實(shí)驗(yàn)報(bào)告_第3頁(yè)
二叉樹實(shí)驗(yàn)報(bào)告_第4頁(yè)
二叉樹實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

過(guò)程控制軟件技術(shù)基礎(chǔ)課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)項(xiàng)目:二叉樹的建立和遍歷姓名:戚風(fēng)亮學(xué)號(hào):1008180230指導(dǎo)教師:任登鳳1.實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)自主設(shè)計(jì)實(shí)驗(yàn),掌握過(guò)程控制軟件的基礎(chǔ)理論知識(shí),本實(shí)驗(yàn)具體表現(xiàn)為二叉樹的建立和遍歷,為以后計(jì)算機(jī)控制的軟件設(shè)計(jì)提供基礎(chǔ)。提高邏輯思維方式,培養(yǎng)應(yīng)用可視化編程工具開發(fā)計(jì)算機(jī)軟件的能力。2.實(shí)驗(yàn)內(nèi)容本文主要介紹二叉樹的建立和遍歷。所使用的編程軟件為matlab2010版本,主要使用其中的GUI功能,完成可視化界面操作。從更直接的角度感受二叉樹的建立和遍歷。二叉樹的建立和遍歷包含兩個(gè)方面:建立和遍歷。其中建立包括輸入二叉樹的每一個(gè)結(jié)點(diǎn)的元素,以及二叉樹每一個(gè)結(jié)點(diǎn)的隨機(jī)存儲(chǔ)地址。與此同時(shí),更重要的是創(chuàng)建兩個(gè)指針域:左指針域L和右指針域R,在本次實(shí)驗(yàn)中,采用產(chǎn)生隨機(jī)數(shù)的方式生成隨機(jī)存儲(chǔ)地址,采用兩個(gè)數(shù)組代表兩個(gè)指針域。二叉樹的遍歷采用遞歸函數(shù)的方式,本實(shí)驗(yàn)中采用三個(gè)函數(shù)Front,Middle,Behind分別實(shí)現(xiàn)前序、中序以及后序的功能。(1)界面的設(shè)計(jì):軟件的設(shè)計(jì)界面見圖1。圖1軟件的總體界面界面中主要包括以下幾個(gè)部分:a.深度m的輸入框:此輸入框在輸入某個(gè)數(shù)值后將決定二叉樹的深度,值得注意的是:本次實(shí)驗(yàn)中的設(shè)計(jì)標(biāo)準(zhǔn)為4層,即最大為4層。當(dāng)輸入數(shù)值大于4時(shí),將提示出錯(cuò)(見圖2),并要求重新輸入。圖2.出錯(cuò)消息提醒框同時(shí),當(dāng)輸入層數(shù)小于4時(shí),軟件將自動(dòng)消去最后的那幾層結(jié)點(diǎn)。(見圖3)圖3.軟件自動(dòng)按要求生成二叉樹層數(shù)b.二叉樹結(jié)點(diǎn)元素輸入框:二叉樹結(jié)點(diǎn)元素輸入框用于輸入每個(gè)結(jié)點(diǎn)的元素值,同時(shí)按照二叉樹的規(guī)則,每一個(gè)根結(jié)點(diǎn)對(duì)應(yīng)至少兩個(gè)子結(jié)點(diǎn),即如果根結(jié)點(diǎn)的值為空(沒有值),則它的子結(jié)點(diǎn)輸入框不得輸入,即其enabled屬性為false(背景色為灰色,見圖3)。當(dāng)根結(jié)點(diǎn)輸入值后,子結(jié)點(diǎn)輸入框即可輸入(見圖4)。與此同時(shí),由于matlab的GUI中,沒有向VB中的line控件,所以必須用代碼加以實(shí)現(xiàn),在matlab中,函數(shù)annotation可以用來(lái)畫箭頭,具體如下:arr(1,1)=annotation(gcf,'arrow',[0.50.35],[0.80.75]);其中,后面的兩組數(shù)據(jù)為坐標(biāo)值,arr(1,1)表示第一排的第一個(gè)箭頭,在matlab中的每個(gè)圖象都對(duì)應(yīng)一個(gè)句柄值,這樣,所有箭頭都對(duì)應(yīng)各自的句柄值,進(jìn)而形成一個(gè)所有箭頭的數(shù)組,便于管理每一個(gè)圖像。圖4.根結(jié)點(diǎn)輸入后子結(jié)點(diǎn)方可輸入c.控制按鈕:生成二叉樹生成二叉樹的主要功能是,將沒有輸入值的結(jié)點(diǎn)以及箭頭隱藏,同時(shí)為每一個(gè)結(jié)點(diǎn)分配隨機(jī)的存儲(chǔ)地址(見圖5),進(jìn)而形成左右指針域。圖5.最終形成的二叉樹如圖5所示,在每個(gè)結(jié)點(diǎn)的左邊有一個(gè)數(shù)字,即代表該結(jié)點(diǎn)在內(nèi)存中的隨機(jī)地址。該數(shù)字由matlab內(nèi)部函數(shù)randperm產(chǎn)生。如:data=randperm(5)即產(chǎn)生1——5的5個(gè)隨機(jī)數(shù)(各不相同),并賦值給數(shù)組data。本次實(shí)驗(yàn)中,最關(guān)鍵的是左右指針域的建立,即左右數(shù)組的建立。為實(shí)現(xiàn)這個(gè)功能,創(chuàng)建函數(shù)[L,R,VV]=point。其中L表示左指針域,R代表右指針域,VV代表值域。至此,二叉樹已完全建立。d.重置按鈕:將界面設(shè)置為初始狀態(tài)e.退出按鈕:退出系統(tǒng)f.前序按鈕:生成二叉樹的前序遍歷。(中序按鈕、后序按鈕依次類推)3.軟件總體結(jié)構(gòu)、程序流程圖軟件總體結(jié)構(gòu):(1)軟件界面總體上有三個(gè)部分:輸入界面二叉樹總體結(jié)構(gòu)控制界面二叉樹最終形成結(jié)果界面二叉樹遍歷顯示(2)軟件程序總體上有以下幾個(gè)方面:a.名為gouzao的函數(shù):該函數(shù)輸入?yún)?shù)為輸入框的坐標(biāo)(x,y),返回該輸入框的特點(diǎn)。即只有該輸入框存在值時(shí),它對(duì)應(yīng)的子結(jié)點(diǎn)輸入框方可輸入。這里所謂的存在值的相反面是“非空”,而并非“空字符串”。b.名為point的函數(shù):該函數(shù)沒有輸入?yún)?shù),但可以返回左指針域、右指針域以及值域。其調(diào)用格式為[L,R,VV]=point。c.名為Front、Middle、Behind的函數(shù):這三個(gè)函數(shù)分別返回前序遍歷、中序遍歷、后序遍歷的結(jié)果。d.名為Erchashu的函數(shù):該函數(shù)為matlab的GUI中系統(tǒng)自動(dòng)生成的m文件格式的函數(shù)。它是整個(gè)系統(tǒng)的中樞,整合了以上的所有函數(shù)。程序流程圖:圖6.程序流程圖4.實(shí)驗(yàn)中遇到的問(wèn)題及解決方法本次實(shí)驗(yàn)中主要有以下兩個(gè):(1)在設(shè)置每個(gè)結(jié)點(diǎn)的回調(diào)函數(shù)時(shí),應(yīng)首先判斷根結(jié)點(diǎn)是否為控制,所謂控制并非“‘’”,即無(wú)法用string=“”判斷,而是利用empty判斷。這樣防止根結(jié)點(diǎn)在輸入后又刪除之后產(chǎn)生的不符合規(guī)定的結(jié)果。(2)遞歸函數(shù)的建立:在matlab中,函數(shù)的參數(shù)值無(wú)法實(shí)現(xiàn)按地址傳遞,只能按值傳遞,這就意味著遞歸函數(shù)不能像VB中那樣地建立。為此,在每一次回調(diào)函數(shù)時(shí),必須先將必要的參數(shù)寄存在一個(gè)變量中,本實(shí)驗(yàn)中利用句柄的“userdata”屬性,將值儲(chǔ)存在變量中,在利用時(shí),再將變量值取出。本實(shí)驗(yàn)中使用了寫文件方式,將數(shù)據(jù)先寫入外部文件中

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論