c++實驗參考模板_第1頁
c++實驗參考模板_第2頁
c++實驗參考模板_第3頁
c++實驗參考模板_第4頁
c++實驗參考模板_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計報告堆棧與簡單語法檢查學生姓名:余 星專 業(yè):計算機應用班 級: 0 8 6 1 9 1學 號: 08619141指導教師: 汪 宇 玲年 月 日1 / 10一 操作和步驟:堆棧(Stack)是一種特殊的順序存儲表,只允許在表的一端(棧頂)進行插入和刪除操作,另一端(棧底)則不允許插入和刪除操作,堆棧的插入和刪除通常稱為入棧和出棧。棧頂?shù)漠斍拔恢檬莿討B(tài)的,用一個指針,即棧頂指針來標示棧頂當前位置。如下圖所示:堆??梢杂脭?shù)組來表示,假設堆??杀4娴臄?shù)據(jù)類型為ElemType。那么堆棧定義如下:ElemType stackMaxSize;(這里我用strack sk256;表示)int t

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

3、。)Bool IsEmpty(); /判斷堆棧是否為空,是返回true;否則返回false;(不判斷,因為出棧和壓棧是配對的,一般不能多也不能少。)Void ClearStack(); /清除堆棧中所有元素,使之成為一個空棧;(pop棧后自動將strack中的元素清零)解決問題:(1)根據(jù)上述提示實現(xiàn)一個堆棧;(2)堆棧在計算機語言中的編譯過程中用來進行語法檢查,編寫一個程序,利用堆棧來檢查一個C+語言程序中的花括號、方括號和圓括號是否配對,若能夠完全配對返回1,否則返回0二實驗程序和演示:程序如下:/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程序段(實現(xiàn)一個堆棧)#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;運行結(jié)果:/main.cpp程序段(檢測括號是否配對)#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您要測試的匹配內(nèi)容:"cin>>ch;tempbool='T'/臨時記錄標志bln='t'boolen='T'/記錄標志count1=0;/標志小括號()count2=0;/標志大括號count3=0;/標志中括號for(i=0;chi!='0'i+)/第一個括號一定是左括號,可直接判斷。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+)/最后一個括號一定是右括

10、號,用出棧形式依次判斷。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+) /判斷所有括號匹配的總

11、數(shù)及所有括號數(shù)。if (chi='(')count1+;/把左小括號"("加1。push(chi);/然后把括號壓入棧。j+;/括號總數(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+;/如果各個括號匹配的總數(shù)不為0

12、,也即左右括號不匹配。if(count1!=0 | count2!=0 | count3!=0 | boolen='F')cout<<"括號不匹配!-左右括號數(shù)不相等。"else/若左右括號匹配再進行處理。for(i=j;i>=0;i-)/把所有括號彈出棧,并放到數(shù)組cl當中。pop(ah);clj=ah;for(i=1;i<=j;i+)/判斷括號是否配錯了,如“(”,“)”等都不匹配。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<<"括號不匹配!-左括號對應的右括號錯誤。"else if(boo

14、len='T')/所有都匹配后還有另外的情況,如“()()”括號不匹配。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)/如果是“()()”,則表明從左到右肯定是右括號多于左括號,返回'F'并退出循環(huán)。boolen='F'break;if(boolen='T') c

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論