版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上*實驗題目:棧的基本運算 實驗者信息:班級 ,姓名 龐文正,學號 實驗完成的時間 3:00*一、 實驗目的1,掌握棧的各種存儲結構及基本運算的實現(xiàn)。2,掌握堆棧后進先出的運算原則在解決實際問題中的應用。3,復習c語言中相關語句及函數(shù)的用法。二、 實驗內(nèi)容括號配對檢查。試設計一個程序對任意輸入的語句或數(shù)學表達式,判斷其括號是否匹配。若匹配,則返回1,否則返回0。調(diào)試程序并對相應的輸出作出分析;修改輸入數(shù)據(jù),預期輸出并驗證輸出的結果。加深對算法的理解。三、 算法設計與編碼1. 本實驗用到的理論知識總結本實驗用到的理論知識,實現(xiàn)理論與實踐相結合??偨Y盡量簡明扼要,并與本次實
2、驗密切相關,最好能加上自己的解釋。2. 算法概要設計給出實驗的數(shù)據(jù)結構描述,程序模塊、功能及調(diào)用關系首先建立一個棧結構,且初始化棧為空。然后由鍵盤上隨即輸入一個帶括號的語句或帶括號的數(shù)學表達式,同時將它們保存在一個字符型數(shù)組exps中。掃描表達式exps,當遇到“(”、“”、“”時,將其入棧。遇到“)”、“”、“”時,判斷棧頂是否有相匹配的括號。若沒有,則退出掃描過程,返回0,否則直到exps掃描完畢為止。若top為0,則返回1。#include#define MAXSIZE 100#define TRUE 1#define FALSE 0typedef int datatype; typed
3、ef struct /順序棧的結構體定義 datatype stackMAXSIZE;int top;seqstack;void setnull(seqstack *s) /置空棧-由于c語言的數(shù)組下標是從0開始的,所以置 s-top=-1; / s-top=-1; 空棧操作時將棧頂指針放在下標為0之前,即-1處。int empty(seqstack *s) /*判斷當前棧是否為空棧*/ if(s-toptop=MAXSIZE-1) printf(stack overflow!n); /*發(fā)生上溢*/ return FALSE; else s-stack+s-top=x; /*棧頂指針上移,數(shù)
4、據(jù)元素入棧*/ return TRUE; datatype pop(seqstack *s) /*彈出當前棧s的棧頂元素*/ if(s-toptop-; return(s-stacks-top+1); /由于return語句的特點,必須先使top減1,然后再執(zhí)行return語句。而此 / 時棧頂元素的表示應該為s-top+1.int judge(seqstack *s) /括號匹配檢查算法。-遇到(、時, / 將其壓 棧s中。 datatype symb,ch,store; push(s,#); symb=getchar();/*從鍵盤接受字符*/ while(symb!=#) switch(
5、symb) case (: case : case : push(s,symb);break; case ): ch=pop(s); if(ch!=() return FALSE; break; case : ch=pop(s); if(ch!=) return FALSE; break; case : ch=pop(s); if(ch!=) return FALSE; break; default: ; symb=getchar(); if(pop(s)=#) return TRUE; else return FALSE; int jinzhishuchu(seqstack *s) int
6、x,symb; scanf(%d,&symb);/*從鍵盤接受字符*/ while(symb!=0) push(s,symb%8); symb=symb/8; while (!empty(s) x=pop(s); /出棧操作 printf(%d,x); /依次輸出出棧結果 printf(n); main() seqstack q; setnull(&q); printf(please input an express end with symbol #:n); if(judge(&q) printf(yesn); /*括號匹配,則輸出yes*/ else printf(non); /*括號不匹
7、配,則輸出no*/jinzhishuchu(&q); 四、 運行與測試(1) 在調(diào)試程序的過程中遇到什么問題,是如何解決的?答:遇到很多括號不匹配(2) 設計了那些測試數(shù)據(jù)?測試結果是什么?(3) 程序運行的結果如何?成功運行!1、 預習思考題調(diào)試好上述程序后,試著完成以下拓展內(nèi)容:(1) 假定表達式不是通過getchar()函數(shù)一個個傳送的,而是存放在一個字符數(shù)組An中,程序需要做哪些改變?將while改為for(i=0;i=strlen(An);i+)switch(Ai) case (: case : case : push(s,symb);break; case ): ch=pop(s)
8、; if(ch!=() return FALSE; break; case : ch=pop(s); if(ch!=) return FALSE; break; case : ch=pop(s); if(ch!=) return FALSE; break; default: ; (2) 在judge()函數(shù)中,如果不用switch()函數(shù),你會怎么處理?用if替代 if(symb=( | symb= | symb=) push(s,symb); if(symb=) ch=pop(s); if(ch!=() return FALSE; if(symb=) ch=pop(s); if(ch!=) return FALSE; if(symb=) ch=pop(s); if(ch!=) return FALSE; 2、 分析討論題:數(shù)制轉換問題是棧應用的一個典型實例。將十進制數(shù)轉換成其它進制的數(shù)有一種簡單的方法:例:十進制轉換成八進制:(66)10=(102)866/8=8 余 28/8=1 余 01/8=0 余 1結果為余數(shù)的逆序:102 。如果用棧的算法來實現(xiàn),怎樣實現(xiàn)?其基本原理是什么?int jinzhishuchu(seqstack *s) /括號匹配檢查算法。-遇到(、時, int x,symb; scanf(%d,&symb);/*從鍵盤接受字符*/ while(s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京警察學院《量子力學》2024 - 2025 學年第一學期期末試卷
- 2026年口腔醫(yī)療管理公司員工社保公積金繳納管理制度
- 2026年劇本殺運營公司飲用水供應管理制度
- 2026年劇本殺運營公司市場推廣專員(連鎖)崗位職責管理制度
- 指向均衡的區(qū)縣教師教育體系構建路徑研究
- 高中歷史教學中比較史學與文明交流互鑒課題報告教學研究課題報告
- 2026年及未來5年中國虛擬空間行業(yè)發(fā)展監(jiān)測及投資策略研究報告
- 云南省跨境電商培訓課件
- 輔警社區(qū)警務面試題目及答案
- 信息告知與承諾制度
- 兒童支氣管哮喘急性發(fā)作急救培訓流程
- 2026年焊工(技師)考試題庫(附答案)
- 四川藏區(qū)高速公路集團有限責任公司2026年校園招聘參考題庫完美版
- 基本醫(yī)療保險內(nèi)控制度
- 抽紙定制合同協(xié)議書
- 物料代購服務合同
- 2025-2026學年人教版小學音樂四年級上冊期末綜合測試卷及答案
- 高數(shù)上冊期末考試及答案
- 風電場運維安全責任書2025年版
- 臘八蒜的課件
- 2025年70歲以上的老人三力測試題庫附答案
評論
0/150
提交評論