




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計車廂調(diào)度胡海洪1數(shù)據(jù)結(jié)構(gòu)課程設(shè)計車廂調(diào)度胡海洪310400642904計算機(jī)科學(xué)與技術(shù)(1)班2006年7月
2.3題車廂調(diào)度實(shí)習(xí)報告題目:編制一個將長度為n的車廂進(jìn)行調(diào)度后的所有序列輸出的程序班級:04計算機(jī)科學(xué)與技術(shù)1班姓名:胡海洪學(xué)號:3104006429完成日期:06年7月一、需求分析1、用編號依次為1,2,3,……,n表示停在鐵路調(diào)度站入口處的車廂序列。2、用一個棧形象地表示為火車的調(diào)度站。3、利用棧先進(jìn)后出的性質(zhì),結(jié)合遞歸和回溯算法,實(shí)現(xiàn)編號1…n的車廂的所有可能的序列和每種序列的出入棧變化過程。本程序用C語言實(shí)現(xiàn),已經(jīng)在TURBOC2.0環(huán)境下通過。二、概要設(shè)計1、設(shè)定棧的抽象數(shù)據(jù)類型定義:ADTStack{數(shù)據(jù)對象:D={ai|ai∈CharSet,i=1,2,……,n,n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,……,n}基本操作:InitStack(&S)操作結(jié)果:構(gòu)造一個空棧S。Push(&S,e);初始條件:棧S已存在。操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。Pop(&S,e);初始條件:棧S已存在。操作結(jié)果:刪除S的棧頂元素,并以e返回其值。StackEmpty(S)初始條件:棧S已存在。操作結(jié)果:若S為空棧,則返回TRUE,否則返回FALSE。}ADTStack本程序包括三個模塊:初始化數(shù)據(jù)——輸入總數(shù)——初始化棧和序列顯示所有的序列——遞歸調(diào)用——輸出所有結(jié)果演示一種序列——輸入要演示的序列——每一步演示三、詳細(xì)設(shè)計1、為了使車廂能夠調(diào)度,需要定義一個棧,利用棧先進(jìn)后出的性質(zhì),改變車廂的順序;因?yàn)檩敵龅男蛄杏泻芏喾N,而且序列的產(chǎn)生是用遞歸產(chǎn)生的,所以定義一個二維數(shù)組,用它保存所有的輸出序列,供演示時調(diào)用。structpathss{intpaths[MAXSIZE][MAXSIZE];intnumber;}AllPath;2、棧類型structSNode{intdata[MAXSIZE];inttop;}S;棧的基本操作:voidInitStack()/*棧的初始化*/{S.top=-1;}voidPush(intq)/*進(jìn)棧*/{S.data[++S.top]=q;}intPop()/*出棧*/{inttemp;temp=S.data[S.top--];returntemp;}intStackEmpty()/*判斷棧是否為空*/{if(S.top==-1)return1;elsereturn0;}3、求所有序列的偽碼算法:voidAttemper(intpos,intpath[],intcur){if(pos<n){一個數(shù)進(jìn)棧后,有兩種處理方式:要么立刻出棧,要么進(jìn)行下一個數(shù)的進(jìn)棧}if(棧不空){一個數(shù)出棧后,有兩種處理方式:要么繼續(xù)出棧,要么繼續(xù)下一個數(shù)的進(jìn)棧}if(pos==n&&???{一種可能輸出序列產(chǎn)生,輸出;并將每種序列保存在二維數(shù)組里;}}4、演示一種序列的偽碼算法:演示時,采用的是向逆推的方法,因?yàn)槲覀円呀?jīng)知道了一種輸出序列的結(jié)果和它的最初狀態(tài),就可以利用棧將中間過程顯示出來;voidChooseDisplay(){intk,Output,Input=1;for(Output=0;Output<n;Output++){if(輸出序列中當(dāng)前的數(shù)據(jù)大于等于入口處的數(shù)據(jù)時){while(輸出序列中當(dāng)前的數(shù)據(jù)大于等于入口處的數(shù)據(jù)時){入口處的數(shù)據(jù)要一直壓棧}顯示每一步結(jié)果}else(序列中當(dāng)前的數(shù)據(jù)小于入口處的數(shù)據(jù)){彈出棧頂,重新顯示結(jié)果}}}5、主函數(shù)和其他函數(shù)voidmain()/*主函數(shù)*/{功能選擇分別調(diào)用:1:InputNumber()2:DisplayAll()3:ChooseDisplay()}voidDisplayAll()/*顯示所有輸出序列*/{調(diào)用函數(shù)Attemper}voidPrint()/*一個棧打印操作*/{inti;for(i=S.top;i>=0;i--)printf("\t\t\t|%d|\n",S.data[i]);}voidDisplayOnly(intk,intOutput,intInput)/*顯示操作序列的狀態(tài)的變化過程*/{第一步:顯示輸出序列的狀態(tài)變化第二步:顯示棧的狀態(tài)變化第三步:顯示輸入序列的狀態(tài)變化}6、函數(shù)的調(diào)用關(guān)系圖反映了演示程序的層次結(jié)構(gòu):InputNumber()DisplayAll()Attemper()ChooseDisplay()InputNumber()ExitInitStack()InputNumber()DisplayAll()Attemper()ChooseDisplay()InputNumber()ExitInitStack()DisplayOnly()InitStack()四、調(diào)試分析本程序的棧其實(shí)也是一個一維數(shù)組,然后用一個top作為指針,控制數(shù)組的長度。棧的基本操作較簡單明了。本程序有兩個核心算法,即求所有序列和演示每一序列的變化過程。整個程序運(yùn)行期間實(shí)行靜態(tài)存儲管理。本程序在TURBOC2.0同VC++環(huán)境下均可通過。五、用戶手冊本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為:Attemper.exe。2、運(yùn)行程序后,顯示如下界面:六、測試結(jié)果(1)測試數(shù)據(jù)n=3;(也可以測試其他數(shù)據(jù))(2)選擇功能“1”,回車,顯示如下:*******************1:輸入火車的長度N**2:輸出所有可能序列**3:演示一個序列變化**4:退出本程序*******************1請輸入火車車廂的長度N:(3)輸入車廂總數(shù)“3”,選擇功能“2”,按回車顯示如下:2所有可能的輸出序列如下:1:3212:2313:2134:1325:123*******************1:輸入火車的長度N**2:輸出所有可能序列**3:演示一個序列變化**4:退出本程序*******************(4)選擇功能“3”,回車顯示如下:3請輸入你想要查看序列狀態(tài)變化過程的序號:7.輸入要演示的序列號,如輸入“3”,再一直按回車,顯示如下:3請輸入你想要查看序列狀態(tài)變化過程的序號:3輸出序列棧輸入序列<----1<----2<----3|1|<----2<----3|2||1|<----3<----2|1|<----3<----2<----1<----3<----2<----1|3|<----2<----1<----3(5)輸入”4”,回車則退出程序七、附錄源程序文件名清單:Attemper.c//主程序Attemper.exe//可執(zhí)行文件Attemper.OBJ//目標(biāo)源文件八、心得體會1、通過這次作業(yè),我感到學(xué)到不少知識,首先對C語言有了一個比較完整的認(rèn)識,以前學(xué)習(xí)C語言的知識很零碎、不系統(tǒng),通過寫源程序使我對C語言的數(shù)據(jù)類型(特別構(gòu)造類型的數(shù)據(jù))有了一個完整的認(rèn)識,為今后進(jìn)一步學(xué)習(xí)C++奠定了良好的基礎(chǔ)。2、加深了對《數(shù)據(jù)結(jié)構(gòu)》這門課程的學(xué)習(xí)和領(lǐng)會。以往只是知道這門課程對計算機(jī)專業(yè)很重要,但具體起來又不明白到底怎樣重要?通過設(shè)計,我才體會到?jīng)]有《數(shù)據(jù)結(jié)構(gòu)》的知識是無法寫程序的!由于本人掌握知識深度欠缺,只好采用一個二維數(shù)組和一個一維數(shù)組,這樣明顯增加了時間復(fù)雜性。3、實(shí)踐是檢驗(yàn)真理的唯一手段!《數(shù)據(jù)結(jié)構(gòu)》中的許多
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目執(zhí)行進(jìn)度回顧與風(fēng)險管理應(yīng)對措施梳理
- 新能源汽車充電設(shè)施建設(shè)及運(yùn)營策略設(shè)計
- 三農(nóng)村扶貧實(shí)施方案
- 健康食品業(yè)智能生產(chǎn)與健康食品研發(fā)創(chuàng)新策略
- 農(nóng)民職業(yè)培訓(xùn)教程指南
- 旅游行程計劃與實(shí)際花費(fèi)對比表
- 聊城2025年山東聊城市技師學(xué)院選聘教師3人筆試歷年參考題庫附帶答案詳解
- 湖南2025年湖南省財政廳編外合同制專業(yè)技術(shù)人員招聘15人筆試歷年參考題庫附帶答案詳解
- 2019年全國碩士研究生招生考試《經(jīng)濟(jì)類聯(lián)考綜合能力》真題及解析
- 垃圾回收能源的利用與利益分配
- 統(tǒng)計法律知識培訓(xùn)課件
- 活動三《垃圾“流浪”記》(教學(xué)設(shè)計)-2023-2024學(xué)年三年級下冊綜合實(shí)踐活動滬科黔科版
- 2024-2025學(xué)年上海六年級語文上學(xué)期期末復(fù)習(xí)分類匯編:現(xiàn)代文閱讀之說明文15篇(熱點(diǎn)預(yù)測)
- 杭州市2025年官方拆遷補(bǔ)償協(xié)議
- 2025年2月廣東省深圳市羅湖區(qū)聯(lián)考初三年級質(zhì)量檢測英語試卷(含答案)
- 政治-廣西壯族自治區(qū)考閱評·2025屆(年)2月高三畢業(yè)班聯(lián)合調(diào)研測試試題和答案
- 2025年合伙協(xié)議模板
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案一套
- 對外漢語綜合課教案集成
- 北京市朝陽區(qū)2024-2025學(xué)年高一上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試題【含答案解析】
- 信息系統(tǒng)監(jiān)理師教程筆記版
評論
0/150
提交評論