




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、安徽三聯(lián)學(xué)院 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)班級(jí): 計(jì) 算 機(jī) 科 學(xué) 與 技 術(shù) 系計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)2008級(jí)(2)班組別: 第 八 組 組長(zhǎng): 徐 恒 組員:何洋洋、枉林然、魏世捷、王煜、戴文強(qiáng) 完成日期:2010.1.20題目:括號(hào)匹配檢驗(yàn)一、問(wèn)題描述:假設(shè)一個(gè)算術(shù)表達(dá)式可以包含3種括號(hào):圓括號(hào)“(”和“)”,方括號(hào)“”和“”,和花括號(hào)“”和“”且這三種括號(hào)可按照任意次序嵌套使用(如:()。設(shè)計(jì)一個(gè)程序,判別所給定表達(dá)式中所含括號(hào)是否匹配。二、 要求:1 將算術(shù)表達(dá)式保存在帶頭結(jié)點(diǎn)的單鏈表中;2 在1中建立的單鏈表上實(shí)現(xiàn)括號(hào)匹配問(wèn)題的求解。三、 解決問(wèn)題思路:1、 首先建立帶頭結(jié)點(diǎn)的單鏈表,單鏈表
2、的數(shù)據(jù)域存儲(chǔ)字符數(shù)據(jù),指針域?yàn)榻Y(jié)點(diǎn)型指針。設(shè)立字符型數(shù)組先將算術(shù)表達(dá)式輸入到數(shù)組當(dāng)中,通過(guò)插入節(jié)點(diǎn)函數(shù)將數(shù)組中字符全部插入到單鏈中1中。2、 建立單鏈表2,通過(guò)switch,case語(yǔ)句將單鏈表1中的括號(hào)字符全部插入到單鏈表2中。3、 調(diào)用括號(hào)匹配函數(shù)將,單鏈表2的頭節(jié)點(diǎn)調(diào)入函數(shù)當(dāng)中,設(shè)立標(biāo)志位has。當(dāng)has取1時(shí),說(shuō)明找到一組匹配括號(hào);當(dāng)has取0時(shí),當(dāng)前一組括號(hào)不匹配。設(shè)立temp指向當(dāng)前所要判斷節(jié)點(diǎn),將temp所指節(jié)點(diǎn)的值與temp-next節(jié)點(diǎn)的值相比較,利用匹配括號(hào)ASCII值相差1或2,相同則相差0;或不相同差值不為1、2或0。當(dāng)temp與temp-next的差值為1或2時(shí),說(shuō)明
3、找到一組匹配括號(hào)。Temp=temp-next;進(jìn)行新的判斷。當(dāng)temp與temp-next的差值不為1或2時(shí),將temp賦為temp-next;進(jìn)行新一輪的判斷。若temp-next-next與temp-next-next-next匹配時(shí),此時(shí)將temp-next-next與temp-next-next-next全部值為空值。且temp-next未找到匹配字符時(shí)將temp重新賦為temp->next,進(jìn)行新的判斷。4、 最后,若單鏈表p為空則則說(shuō)明表達(dá)式中括號(hào)匹配;若p不為空,則說(shuō)明算術(shù)表達(dá)式中括號(hào)不匹配。四、 運(yùn)行環(huán)境:1、 編輯主要環(huán)境為microsoft visualC+6.0。
4、2、 調(diào)試運(yùn)行環(huán)境為T(mén)urbo C2.0。五、 組員分工情況:1、 何洋洋、汪林然負(fù)責(zé)單鏈表相關(guān)函數(shù)的編寫(xiě);2、 王煜、洪小龍負(fù)責(zé)收集相關(guān)材料和參考資料;3、 徐恒、戴文強(qiáng)負(fù)責(zé)整理、編譯和調(diào)試。/六、 遇到的困難及解決問(wèn)題的辦法:1、 最后在調(diào)試程序時(shí)發(fā)現(xiàn)許多錯(cuò)誤,例如函數(shù)類(lèi)型不匹配、沒(méi)有合適的指針、未定義變量、句法錯(cuò)誤、函數(shù)聲明錯(cuò)誤、不合法的指針、有未使用的變量、定義不正確等。先是找同學(xué)幫助,然后自己學(xué)著改錯(cuò)。慢慢的自己學(xué)會(huì)改錯(cuò),并找到相關(guān)資料來(lái)找出的修改方法。2、 遇到實(shí)在不懂的地方,就找組員和同學(xué)一起討論,找到問(wèn)題的根本原因,然后加以糾正。七、 源代碼及注釋?zhuān)豪ㄌ?hào)匹配源程序代碼及注釋#i
5、nclude <stdio.h> /*頭文件*/#include <string.h>#include <stdlib.h>#define LEN 80typedef struct listchar node; /*數(shù)據(jù)域*/struct list *next; /*指針域*/list,*linklist; /*節(jié)點(diǎn)類(lèi)型*/ void initlist(linklist); /*函數(shù)聲明*/int isempty(linklist);int creatlist_node(linklist,char);Textlist(linklist);void main(
6、) /*主函數(shù)*/char testLEN; int i;list a,b; linklist p,q=&b; /*設(shè)立P為list結(jié)點(diǎn)指針*/p=&a; /*使P指向頭結(jié)點(diǎn)a*/initlist(p); /*使p為第一個(gè)節(jié)點(diǎn)*/ printf("Pliease input the expression:n");scanf("%80s",test);for(i=0;i<LEN;i+) creatlist_node(q,testi); /*將數(shù)組中算術(shù)表達(dá)式存入單鏈表q中*/for(i=0;i<LEN;i+,q=q->ne
7、xt)switch(q->node)case '':case '':case '':case '':case '(':case ')':creatlist_node(p,q->node);/*將q中括號(hào)插入單鏈表p中*/break;default : continue; /*若節(jié)點(diǎn)中字符不為括號(hào)則進(jìn)入下一次循環(huán)*/ Testlist(p); /*調(diào)用判斷括號(hào)匹配函數(shù),用P鏈表作為實(shí)參*/if(isempty(p) /*判斷P是否為空,p為空則表達(dá)式中括號(hào)匹配*/printf("
8、Truen"); printf("the kuo hao in expression is pipein"); else /*P不為空,則表達(dá)式中括號(hào)不匹配*/printf("Falsen"); printf("the kuo hao in expression is not pipein"); void initlist(linklist aplist) /*構(gòu)造頭結(jié)點(diǎn)函數(shù)*/struct list *next;aplist->next=NULL;aplist->node='0'int isem
9、pty(linklist aplist) /*判斷頭結(jié)點(diǎn)是否為空函數(shù)*/linklist next;return aplist->next=NULL?1:0; /*頭結(jié)點(diǎn)不為空側(cè)返回0*/int creatlist_node(linklist aplist,char a) /*插入字符節(jié)點(diǎn)函數(shù)*/ /*建立list型anode節(jié)點(diǎn),將字符a插入*/linklist bplist=aplist,anode; /*設(shè)立bplist作為中間變量用于添加節(jié)點(diǎn)*/while(bplist->next)bplist=bplist->next;anode=(linklist)malloc(
10、sizeof(list); /*構(gòu)造一個(gè)list型節(jié)點(diǎn)并分配空間 */if(!anode)exit(-1);anode->node=a;anode->next=NULL;bplist->next=anode;return 0;int Testlist(linklist aplist) /*判斷算術(shù)表達(dá)式中括號(hào)是否匹配函數(shù)*/linklist temp; /*設(shè)立list型節(jié)點(diǎn)temp作為臨時(shí)變量*/int has=1; /*作為標(biāo)志,當(dāng)一對(duì)括號(hào)匹配時(shí),則has置為0,否則置為1*/if(isempty(aplist) /*P為空則返回0*/return 0;while(has
11、) linklist next; /*設(shè)立next為linklist型變量,用于指向新的節(jié)點(diǎn)*/has=0;temp=aplist; /*使temp指向第一個(gè)節(jié)點(diǎn)*/while(temp->next) /*若第2個(gè)節(jié)點(diǎn)不為空,進(jìn)入while循環(huán)*/if(temp->next->next) /*若第3個(gè)節(jié)點(diǎn)不為空,繼續(xù)判斷*/ if(temp->next->next->node-temp->next->node=1)|(temp->next->next->node-temp->next->node=2)/*若第3個(gè)節(jié)點(diǎn)
12、字符值減去第2個(gè)節(jié)點(diǎn)字符值為1或2則條件成立進(jìn)入if語(yǔ)句*/temp->next=temp->next->next->next; /*將節(jié)點(diǎn)1賦值為節(jié)點(diǎn)3*/has=1; /*標(biāo)志has重置為1*/elsetemp=temp->next;/*若第3個(gè)節(jié)點(diǎn)字符值減去第2個(gè)節(jié)點(diǎn)字符值為0則將temp置為下一個(gè)節(jié)點(diǎn)*/else temp=temp->next; /*若第三個(gè)節(jié)點(diǎn)為空則將temp置為下一個(gè)節(jié)點(diǎn)*/if(!has) /*判斷has的值若為1則退出內(nèi)while循環(huán)*/break;return 0; /*當(dāng)has值為0時(shí)則函數(shù)返回0*/八、 運(yùn)行結(jié)果:運(yùn)行結(jié)果如下:1、 輸入表達(dá)式2x+6y-3y+2z*4z+(45-2x)*13-32結(jié)果如下:2、 輸入表達(dá)式2x+2y+2z-(2x-3y)*5+43*5z-32*12結(jié)果如下:3、 輸入表達(dá)式結(jié)果如下:4、 輸入表達(dá)式純括號(hào)類(lèi)型如:則輸出結(jié)果為錯(cuò)誤,與實(shí)際狀況不符。九、 討論部分:1、 在單鏈表之后,從數(shù)組中提取字符輸入到單鏈表中時(shí),無(wú)法正確輸進(jìn)去,后來(lái)找同學(xué)查看,發(fā)現(xiàn)指針有些錯(cuò)誤。經(jīng)過(guò)修改之后,可將字符成功插入到單鏈表中。經(jīng)過(guò)討論后得知指針未正確指向頭結(jié)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)政投資風(fēng)險(xiǎn)評(píng)審流程
- 養(yǎng)老護(hù)理員職業(yè)素養(yǎng)培訓(xùn)計(jì)劃
- 醫(yī)院醫(yī)療安全資金投入計(jì)劃
- 人教版七年級(jí)下冊(cè)生物教學(xué)創(chuàng)新模式計(jì)劃
- 最美文化工作者事跡材料范文
- 風(fēng)門(mén)砌筑施工規(guī)范化管理技術(shù)措施
- 裝配式建筑施工現(xiàn)場(chǎng)管理機(jī)構(gòu)設(shè)置及職責(zé)
- 幼兒園疫情期間中班家長(zhǎng)志愿者參與計(jì)劃
- ERP系統(tǒng)軟件項(xiàng)目進(jìn)度計(jì)劃
- 舞蹈愛(ài)好者社團(tuán)活動(dòng)計(jì)劃
- 工程部?jī)?nèi)部培訓(xùn)(一)項(xiàng)目經(jīng)理培訓(xùn)
- 《病歷書(shū)寫(xiě)基本規(guī)范》課件
- 【多旋翼無(wú)人機(jī)的組裝與調(diào)試分析6000字(論文)】
- 中學(xué)生反詐專(zhuān)題主題班會(huì)課件
- 塔式起重機(jī)安裝驗(yàn)收牌
- 幼兒園大班社會(huì)《偉大的起點(diǎn) 》 高清有聲課件
- 《義務(wù)教育地理新課程標(biāo)準(zhǔn)》(2022年版)新課標(biāo)初中地理解讀與梳理教學(xué)課件
- 工程倫理-核工程的倫理問(wèn)題
- 施工臨時(shí)設(shè)施驗(yàn)收表
- 2022年隴南市事業(yè)單位考試真題
- 中藥學(xué)電子版教材
評(píng)論
0/150
提交評(píng)論