c++實(shí)驗(yàn)參考模板_第1頁(yè)
c++實(shí)驗(yàn)參考模板_第2頁(yè)
c++實(shí)驗(yàn)參考模板_第3頁(yè)
c++實(shí)驗(yàn)參考模板_第4頁(yè)
c++實(shí)驗(yàn)參考模板_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告堆棧與簡(jiǎn)單語(yǔ)法檢查學(xué)生姓名:余 星專 業(yè):計(jì)算機(jī)應(yīng)用班 級(jí): 0 8 6 1 9 1學(xué) 號(hào): 08619141指導(dǎo)教師: 汪 宇 玲年 月 日1 / 10一 操作和步驟:堆棧(Stack)是一種特殊的順序存儲(chǔ)表,只允許在表的一端(棧頂)進(jìn)行插入和刪除操作,另一端(棧底)則不允許插入和刪除操作,堆棧的插入和刪除通常稱為入棧和出棧。棧頂?shù)漠?dāng)前位置是動(dòng)態(tài)的,用一個(gè)指針,即棧頂指針來(lái)標(biāo)示棧頂當(dāng)前位置。如下圖所示:堆??梢杂脭?shù)組來(lái)表示,假設(shè)堆棧可保存的數(shù)據(jù)類型為ElemType。那么堆棧定義如下:ElemType stackMaxSize;(這里我用strack sk256;表示)int t

2、op; /堆棧指針堆棧相關(guān)的操作如下:Void InitStack(Stack& S); /初始化堆棧S,即把它置為空;(numall中初始設(shè)置為0)Void push(ElemType item); /元素item 進(jìn)棧,即插入item 到棧頂;(push(int或char或double);使用壓棧操作)ElemType Pop( ); /彈出棧頂元素并返回其值;(pop(int或char或double);使用出棧操作)ElemType Peek(); /返回棧頂元素的值,但不移動(dòng)棧頂指針;(這里直接用pop括號(hào)里面的數(shù)做返回值如:pop(eax),則把push里面的值傳送到eax中

3、。)Bool IsEmpty(); /判斷堆棧是否為空,是返回true;否則返回false;(不判斷,因?yàn)槌鰲:蛪簵J桥鋵?duì)的,一般不能多也不能少。)Void ClearStack(); /清除堆棧中所有元素,使之成為一個(gè)空棧;(pop棧后自動(dòng)將strack中的元素清零)解決問題:(1)根據(jù)上述提示實(shí)現(xiàn)一個(gè)堆棧;(2)堆棧在計(jì)算機(jī)語(yǔ)言中的編譯過程中用來(lái)進(jìn)行語(yǔ)法檢查,編寫一個(gè)程序,利用堆棧來(lái)檢查一個(gè)C+語(yǔ)言程序中的花括號(hào)、方括號(hào)和圓括號(hào)是否配對(duì),若能夠完全配對(duì)返回1,否則返回0二實(shí)驗(yàn)程序和演示:程序如下:/stack.h程序部分struct strackint int_p;/保存整型變量值。cha

4、r char_p;double double_p;int flag;sk256;int numall=0;void push(int p)/壓入整型變量值。numall+;_p=p;sknumall.char_p=p;sknumall.double_p=p;sknumall.flag=1;void push(char p)numall+;_p=p;sknumall.char_p=p;sknumall.double_p=p;sknumall.flag=2;void push(double p)numall+;_p=p;skn

5、umall.char_p=p;sknumall.double_p=p;sknumall.flag=3;void pop(int &p)/彈出整型變量值。int eax,ebx,ecx,edx;p=_p;_p=0;sknumall.char_p=0;sknumall.double_p=0;numall-;void pop(char &p)char eax,ebx,ecx,edx;p=sknumall.char_p;_p=0;sknumall.char_p=0;sknumall.double_p=0;numal

6、l-;void pop(double &p)double eax,ebx,ecx,edx;p=sknumall.double_p;_p=0;sknumall.char_p=0;sknumall.double_p=0;numall-;/stack.cpp程序段(實(shí)現(xiàn)一個(gè)堆棧)#include <iostream.h>#include "stack.h"void main()int i;double d;char ch;push(123);push('t');push(456.789);pop(d);pop(ch);p

7、op(i);cout<<"i="<<i<<endl;cout<<"d="<<d<<endl;cout<<"ch="<<ch<<endl;運(yùn)行結(jié)果:/main.cpp程序段(檢測(cè)括號(hào)是否配對(duì))#include <iostream.h>#include "stack.h"void stack()int i,j,count1,count2,count3;char ch100,cl50;char ah,b

8、oolen,bln,tempbool,gec;gec='n'while(gec!='y')cout<<"n您要測(cè)試的匹配內(nèi)容:"cin>>ch;tempbool='T'/臨時(shí)記錄標(biāo)志bln='t'boolen='T'/記錄標(biāo)志count1=0;/標(biāo)志小括號(hào)()count2=0;/標(biāo)志大括號(hào)count3=0;/標(biāo)志中括號(hào)for(i=0;chi!='0'i+)/第一個(gè)括號(hào)一定是左括號(hào),可直接判斷。push(chi);/依次把數(shù)據(jù)壓到棧內(nèi)。if(tempbool

9、='T')if(chi!='(' && chi!='' && chi!='')&&(bln='t')if (chi=')' | chi='' | chi='')boolen='F'tempbool='F'else bln='f'tempbool='T'bln='t'for(i=0;chi!='0'i+)/最后一個(gè)括號(hào)一定是右括

10、號(hào),用出棧形式依次判斷。pop(ah);/出棧操作。if(tempbool='T')if(ah!=')' && ah!='' && ah!='')&&(bln='t')if (ah='(' | ah='' | ah='')boolen='F'tempbool='F'else bln='f'j=0;for(i=0;chi!='0'i+) /判斷所有括號(hào)匹配的總

11、數(shù)及所有括號(hào)數(shù)。if (chi='(')count1+;/把左小括號(hào)"("加1。push(chi);/然后把括號(hào)壓入棧。j+;/括號(hào)總數(shù)加1。if(chi=')')count1-;push(chi);j+;if(chi='')count2+;push(chi);j+;if(chi='')count2-;push(chi);j+;if(chi='')count3+;push(chi);j+;if(chi='')count3-;push(chi);j+;/如果各個(gè)括號(hào)匹配的總數(shù)不為0

12、,也即左右括號(hào)不匹配。if(count1!=0 | count2!=0 | count3!=0 | boolen='F')cout<<"括號(hào)不匹配!-左右括號(hào)數(shù)不相等。"else/若左右括號(hào)匹配再進(jìn)行處理。for(i=j;i>=0;i-)/把所有括號(hào)彈出棧,并放到數(shù)組cl當(dāng)中。pop(ah);clj=ah;for(i=1;i<=j;i+)/判斷括號(hào)是否配錯(cuò)了,如“(”,“)”等都不匹配。if(chi-1='(')if(chi='')|(chi='')boolen='F'/

13、不匹配后返回'F',即false。break;else if(chi-1='')if(chi='')|(chi=')')boolen='F'break;else if(chi-1='')if(chi=')')|(chi='')boolen='F'break;else boolen='T'if(boolen='F')cout<<"括號(hào)不匹配!-左括號(hào)對(duì)應(yīng)的右括號(hào)錯(cuò)誤。"else if(boo

14、len='T')/所有都匹配后還有另外的情況,如“()()”括號(hào)不匹配。count1=0;count2=0;count3=0;for(i=0;i<=j;i+)if(chi='(')count1+;if(chi=')')count1-;if(chi='')count2+;if(chi='')count2-;if(chi='')count3+;if(chi='')count3-;if(count1=-1)|(count2=-1)|(count3=-1)/如果是“()()”,則表明從左到右肯定是右括號(hào)多于左括號(hào),返回'F'并退出循環(huán)。boolen='F'break;if(boolen='T') c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論