版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)_課程設(shè)計_括號匹配問題數(shù)據(jù)結(jié)構(gòu)_課程設(shè)計_括號匹配問題數(shù)據(jù)結(jié)構(gòu)_課程設(shè)計_括號匹配問題廣東工業(yè)大學華立學院課程設(shè)計課程名稱數(shù)據(jù)結(jié)構(gòu)題目名稱括號匹配學生學院廣東工業(yè)大學華立學院專業(yè)班級09計算機2學
號11010902026學生姓名李杰指導教師林榮霞2010年12月27日廣東工業(yè)大學華立學院課程設(shè)計(論文)任務(wù)書題目名稱括號匹配學生學部(系)信息與計算機學部專業(yè)班級09計算機2班姓名XX學號110109020XX一、課程設(shè)計(論文)的內(nèi)容括號匹配問題,假設(shè)一個算術(shù)表達式中包含圓括號、方括號和花括號三種類型的括號,編寫一個函數(shù),用來判別表達式中括號是否正確配對。二、課程設(shè)計(論文)的要求與數(shù)據(jù)要求當輸入一表達式,可判斷并輸出括號是否匹配。三、課程設(shè)計(論文)應(yīng)完成的工作(1)根據(jù)上述要求完成一個功能完善的程序;(2)采用模塊化的程序設(shè)計方法,程序書寫符合規(guī)范,程序設(shè)計應(yīng)完善;(3)對系統(tǒng)進行初步的錯誤和漏洞檢測;(4)根據(jù)設(shè)計規(guī)范撰寫報告并按時提交;(5)設(shè)計內(nèi)容用A4紙打印并按要求裝訂。四、課程設(shè)計(論文)進程安排序號設(shè)計(論文)各階段內(nèi)容地點起止日期1搜集資料圖書館11。24-11.262需求分析圖書館11.27-11.303系統(tǒng)分析與設(shè)計圖書館12.1-12。44功能模塊的實現(xiàn)綜702機房12.5—12。155系統(tǒng)測試,運行綜702機房12。16—12。196完成課程設(shè)計(論文)綜702機房12。20—12。27五、應(yīng)收集的資料及主要參考文獻周海英。馬巧梅。數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(第二版)。國際工業(yè)出版社2005朱戰(zhàn)立。數(shù)據(jù)結(jié)構(gòu)——-使用C語言(第四版).電子工業(yè)出版社2009吳躍。數(shù)據(jù)結(jié)構(gòu)和算法。機械工業(yè)出版社2010發(fā)出任務(wù)書日期:2010年11月23日指導教師簽名:計劃完成日期:2010年12月27日教學單位責任人簽章:目錄1設(shè)計內(nèi)容 12算法思想描述 13算法及程序?qū)崿F(xiàn) 24算法測試及結(jié)果 45總結(jié) 8參考資料 9設(shè)計內(nèi)容:括號匹配問題,假設(shè)一個算術(shù)表達式中包含圓括號、方括號和花括號三種類型的括號,編寫一個函數(shù),用來判別表達式中括號是否正確配對。算法要求:要求當輸入一表達式,可判斷并輸出括號是否匹配。算法思想在算術(shù)表達式中,右括號和左括號匹配的次序正好符合后到的括號要最先被匹配的“后進先出”堆棧操作特點,因此可以借助一個堆棧來進行判斷。括號匹配共有以下4種情況:左右括號配對次序不正確;右括號多于左括號;左括號多于右括號;左右括號配對正確;具體方法如下:順序掃描算術(shù)表達式,當遇到3種類型括號的左括號時,讓該括號進棧.當掃描到某一種類型的右括號時,比較當前棧頂括號是否與之匹配,若匹配,則退棧繼續(xù)進行判斷;若當前棧頂括號與當前掃描的括號不相同,則左、右括號配對次序不正確;若字符串當前為某種類型右括號而堆棧已空,則右括號多于左括號;字符串循環(huán)掃描結(jié)束時,若堆棧非空,則說明左括號多于右括號;如果上述三種情況都沒有出現(xiàn),則說明左、右括號匹配正確。1算法以及程序?qū)崿F(xiàn)主函數(shù)設(shè)計如下:VoidExpIsCorrect(charexp[],intn)//判斷有n個字符的字符串exp左、右括號是否配對正確{SeqStackmyStack;//定義順序堆棧變量myStackinti;charc;StackInitiate(&myStack);//初始化堆棧for(i=0;i<n,i++){if((exp[i]=='(')||(exp[i]==’[’]||(exp[i]==’{’)) StackPush(&myStack,exp[i]);//入棧elseif(exp[i]==')’&&StackNotEmpty(myStack) &&StackTop(myStack,&c)&&c=='(') StackPop(&myStack,&c);//出棧elseif(exp[i]==')'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!='('){ printf(”左右括號配對次序不正確!\n”); return;}//判斷括號elseif(exp[i]==']'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c=='[’) StackPop(&myStack,&c);elseif(exp[i]==’]'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!=’['){ printf("左右括號配對次序不正確!\n”); return;}//判斷方括號elseif(exp[i]=='}'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c=='{') StackPop(&myStack,&c);elseif(exp[i]==']’&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!='{'){ printf("左右括號配對次序不正確!\n"); return;}//判斷花括號elseif(((exp[i]==')')||(exp[i]==')')||(exp[i]==’}’)) &&!StackNotEmpty(myStack)){ printf(”右括號多于左括號!\n"); return;}}if(StackNotEmpty(myStack))printf("左括號多于右括號!\n”);elseprintf("左右括號匹配正確!\n");}3算法測試以及測試結(jié)果函數(shù)頭文件(SeqStack。h):typedefstruct{DataTypestack[MaxStackSize];inttop;}SeqStack;voidStackInitiate(SeqStack*S)/*初始化順序堆棧S*{S—>top=0;/*定義初始棧頂下標值*/}intStackNotEmpty(SeqStackS)/*判順序堆棧S非空否,非空則返回1,否則返回0*/{if(S。top〈=0)return0;elsereturn1;}intStackPush(SeqStack*S,DataTypex)/*把數(shù)據(jù)元素值x壓入順序堆棧S,入棧成功則返回1,否則返回0*/{if(S—〉top>=MaxStackSize){printf("堆棧已滿無法插入!\n");return0;}else{S->stack[S->top]=x;S->top++;return1;}}intStackPop(SeqStack*S,DataType*d)/*彈出順序堆棧S的棧頂數(shù)據(jù)元素值到參數(shù)d,出棧成功則返回1,否則返回0*/{if(S->top<=0){printf("堆棧已空無數(shù)據(jù)元素出棧!\n");return0;}else{S—〉top——;*d=S-〉stack[S—>top];return1;}}intStackTop(SeqStackS,DataType*d)/*取順序堆棧S的當前棧頂數(shù)據(jù)元素值到參數(shù)d,成功則返回1,否則返回0*/{if(S。top<=0){printf(”堆棧已空!\n”);return0;}else{*d=S.stack[S.top-1];return1;}}測試函數(shù)如下:#include〈string。h>#include〈stdio.h〉#defineMaxStackSize100typedefcharDataType;#include"SeqStack。h"VoidExpIsCorrect(charexp[],intn)//判斷有n個字符的字符串exp左、右括號是否配對正確{SeqStackmyStack;//定義順序堆棧變量myStackinti;charc;StackInitiate(&myStack);//初始化堆棧for(i=0;i<n,i++){if((exp[i]==’(’)||(exp[i]==’[']||(exp[i]==’{')) StackPush(&myStack,exp[i]);//入棧elseif(exp[i]==’)'&&StackNotEmpty(myStack) &&StackTop(myStack,&c)&&c=='(') StackPop(&myStack,&c);//出棧elseif(exp[i]==’)'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!='(’){ printf(”左右括號配對次序不正確!\n"); return;}//判斷括號elseif(exp[i]==']'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c=='[’) StackPop(&myStack,&c);elseif(exp[i]==']’&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!=’[’){ printf(”左右括號配對次序不正確!\n"); return;}//判斷方括號elseif(exp[i]=='}'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c=='{’) StackPop(&myStack,&c);elseif(exp[i]==']'&&StackNotEmpty(myStack)&&StackTop(myStack,&c)&&c!='{'){ printf(”左右括號配對次序不正確!\n”); return;}//判斷花括號elseif(((exp[i]==’)’)||(exp[i]==')')||(exp[i]=='}’)) &&!StackNotEmpty(myStack)){ printf(”右括號多于左括號!\n"); return;}}if(StackNotEmpty(myStack))printf("左括號多于右括號!\n");elseprintf("左右括號匹配正確!\n");}voidmain(void){ chara[]=”(())abc{[]()}”;//測試例子1 charb[]="(()))abc{[]}";//測試例子2charc[]=”(()()abc{[]}";//測試例子3chard[]="(())abc{[]}";//測試例子4 intn1=strlen(a); intn2=strlen(b); intn3=strlen(c); intn4=strlen(d); ExpIsCorrect(a,n1); ExpIsCorrect(b,n2); ExpIsCorrect(c,n3); ExpIsCorrect(d,n4);}測試結(jié)果:左括號配對次序不正確!右括號多于左括號!左括號多于右括號!左右括號匹配正確!7總結(jié) 課程設(shè)計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對我們的實際工作能力的具體訓練和考察過程.隨著科學技術(shù)發(fā)展的日新月異,當今計算機應(yīng)用在生活中可以說得是無處不在.因此作為二十一世紀的大學來說掌握程序開發(fā)技術(shù)是十分重要的,而C語言又是最常見,功能最強大的一種高級語言,因此做好C語言課程設(shè)計是十分必要的.通過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學過的知識理解得不夠深刻,掌握得不夠牢固,比如說指針和堆棧的使用。通過這次課程設(shè)計之后,我又把前面所學過的知識又重新溫故了一遍。我做的課題是:編一個程序判斷括號是否匹配。我發(fā)現(xiàn)編程是一件很枯燥很無聊的事情,但是我強破自己堅持下去,按照老師所說的模塊化思想,分部分的進行編寫.而且編程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因為某一處的小的錯誤而導致整個程序的無法運行。所以認真仔細就是非常重要的了.開始的時候真的感覺編程是一件很無聊的事情,不過當一個程序運行成功的時候那種喜悅是無法言語的,那種成就感是無法比擬的。很慶幸最終我完成了這個作業(yè)通過這次課程設(shè)計,使我對C語言有了更進一步的認識和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好地學習它,我也發(fā)現(xiàn)我的好多不足之處,比如說經(jīng)常漏寫分號和把中文的標點符號寫進去程序里面,但是我會在接下來的學習中改掉這些毛病也會更加注視實踐操作,使自己能夠把這門課程學好.8參考文獻周海英。馬巧梅.數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(第二版).國際工業(yè)出版社2005朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)—--使用C語言(第四版).電子工業(yè)出版社2009吳躍。數(shù)據(jù)結(jié)構(gòu)和算法。機械工業(yè)出版社20109心得體會課程設(shè)計是培養(yǎng)學生綜合運用所學知識、發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。隨著科學技術(shù)發(fā)展的日新日異,當今計算機應(yīng)用在生活中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版六年級作文教學課程設(shè)計計劃
- 2024年航空器制造行業(yè)技術(shù)創(chuàng)新合作合同
- 二零二四年度農(nóng)業(yè)綠色生產(chǎn)農(nóng)膜采購合同2篇
- 二零二四年度古建筑泥水班組勞務(wù)分包工程合同3篇
- 二零二四年度農(nóng)業(yè)設(shè)備采購合同模板及技術(shù)支持服務(wù)3篇
- 二零二四年度體育賽事媒體宣傳合作合同范本2篇
- 二零二五版純電動物流車租賃及安全責任合同2篇
- 二零二四年冬季公共設(shè)施清雪與維護服務(wù)合同3篇
- 二零二四年度0kv配電站施工合同條款與服務(wù)內(nèi)容
- 2025年度二零二五年環(huán)評技術(shù)服務(wù)合同正規(guī)范范本
- 《中國心力衰竭診斷和治療指南(2024)》解讀完整版
- 《檔案管理課件》課件
- 2025年中考物理終極押題猜想(新疆卷)(全解全析)
- 脛骨骨折的護理查房
- 抽水蓄能電站項目建設(shè)管理方案
- 電動工具培訓課件
- 《智能網(wǎng)聯(lián)汽車智能傳感器測試與裝調(diào)》電子教案
- GB/T 32399-2024信息技術(shù)云計算參考架構(gòu)
- 2025年湖南省長沙市中考數(shù)學模擬試卷(附答案解析)
- 五級人工智能訓練師(初級)職業(yè)技能等級認定考試題庫(含答案)
- 企業(yè)職務(wù)犯罪法制講座課件
評論
0/150
提交評論