數(shù)據(jù)結構實驗 表達式括號匹配配對判斷問題_第1頁
數(shù)據(jù)結構實驗 表達式括號匹配配對判斷問題_第2頁
數(shù)據(jù)結構實驗 表達式括號匹配配對判斷問題_第3頁
數(shù)據(jù)結構實驗 表達式括號匹配配對判斷問題_第4頁
數(shù)據(jù)結構實驗 表達式括號匹配配對判斷問題_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗 表達式括號匹配配對判斷問題姓名: 班級:學號: 實驗時間:1.問題描述一個算術表達式含圓括號、中括號、花括號,且它們可任意嵌套使用。寫一程序,判斷任一算術表達式中所含括號是否正確配對。2.數(shù)據(jù)結構設計匹配判別發(fā)生在右括號出現(xiàn)時,且被匹配的左括號應是距離右括號最近被輸入的,二不是最先被輸入的括號,即“先入后匹配”。因此用棧來解決。#define stacksize 100 /定義棧的空間大小structstack /定義棧的結構體char strstackstacksize;/定義棧的存儲格式為字符型 int top; /定義棧的棧頂變量;void InitStack(stack &

2、;s)/定義一個新棧s,初始化棧頂為-1s.top = -1;3.算法設計(1)入棧的算法char Push(stack &s, char a) /入棧操作,將字符a入棧sif(s.top = stacksize - 1) /當棧頂為棧的空間大小-1,棧滿 return 0;s.top +;/入棧操作一次,棧頂+1s.strstacks.top = a;/此時,棧頂元素為字符areturn a;(2)出棧的算法設計char Pop(stack &s ) /出棧操作if(s.top = -1) /當棧頂為-1時,??誶eturn 0;char a = s.strstacks.to

3、p;/將棧頂元素賦予字符a,并返回字符a,完成出棧操作s.top-;return a;(3)判斷棧是否為空的函數(shù)int Empty(stack &s,int re) /定義判斷棧是否為空的函數(shù)if(s.top=-1)return 1;/棧為空時返回值為1elsereturn 0;/棧不為空時返回值為0(4)判斷是否匹配的算法。如果右括號,進棧,取下個字符;如果是左括號,出棧,取下個字符;最后判斷棧是否為空。int Check(char* str) /檢驗括號是否匹配的函數(shù)stack s;InitStack(s);int strn = strlen(str); /定義字符串長度為strn

4、 for(int i=0;i <strn;i+)char a=stri;int re=0;switch(a)/對輸入的字符a進行判斷case '(':case '':case '':Push(s,a);/若是左括號,則進行入棧操作break;/若是右括號,則進行出棧操作,若出棧元素不是與輸入相對應的左括號,則字符串括號中不匹配,返回case ')':if(Pop(s)!='(')return 0;break;case '':if(Pop(s)!='')return 0;brea

5、k;case '':if(Pop(s)!='')return 0;break;int re=0; /定義并初始化判空函數(shù)的返回值re=Empty(s,re); /返回判空函數(shù)的返回值if(re=1)return 1; /棧為空elsereturn 0; /棧不為空,有左括號,存在'('或''或''未匹配 4.運行與測試輸入1+(2+3)輸入1+(2+3)輸入1+(2+3)輸入1+2+3+4輸入1+2+(4-2)*25.調試記錄及收獲在運行程序時,當輸入1+(2+3)時,因為錯把(寫成(,也就是輸入法的中英文沒有切換

6、,所以得到的結果是錯的。這就說明輸入時要注意中英文。通過本次實驗,我對棧的使用更加熟練,入棧出棧的順序也有了更一步的了解。附:源代碼#include "stdafx.h"#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#define stacksize 100 /定義棧的空間大小 structstack /定義棧的結構體 char strstackstacksize;/定義棧的存儲格式為字符型 int top; /定義棧的棧頂變量 ;void

7、 InitStack(stack &s)/定義一個新棧s,初始化棧頂為-1char Push(stack &s, char a) /入棧操作,將字符a入棧schar Pop(stack &s ) /出棧操作int Empty(stack &s,int re) /定義判斷棧是否為空的函數(shù)if(s.top=-1) return 1;/棧為空時返回值為1 if(s.top = -1) /當棧頂為-1時,棧空 return 0; char a = s.strstacks.top;/將棧頂元素賦予字符a,并返回字符a,完成s.top-; return a; if(s.to

8、p = stacksize - 1) /當棧頂為棧的空間大小-1,棧滿 return 0; s.top +;/入棧操作一次,棧頂+1 s.strstacks.top = a;/此時,棧頂元素為字符a return a; s.top = -1; 出棧操作else return 0;/棧不為空時返回值為0int Check(char* str) /檢驗括號是否匹配的函數(shù)case '': if(Pop(s)!='') return 0; break; stack s; InitStack(s); int strn = strlen(str); /定義字符串長度為str

9、n for(int i=0;i <strn;i+) char a=stri; int re=0; switch(a) /對輸入的字符a進行判斷 case '(': case '': case '': Push(s,a);/若是左括號,則進行入棧操作 break; /若是右括號,則進行出棧操作,若出棧元素不是與輸入相對應的左括case ')': if(Pop(s)!='(') return 0; break; 號,則字符串括號中不匹配,返回 case '':if(Pop(s)!='

10、9;) return 0; break; /*case ')': if(Empty(s,re) | Pop(s) != '(') return 0; Pop(s); break;case '': if(Empty(s,re) | Pop(s) != '') return 0; Pop(s); break;case '': if(Empty(s,re) | Pop(s) != '') return 0; Pop(s); break;*/void main() /主函數(shù) char str100; /定義一個單字符型數(shù)組以儲存鍵盤輸入的字符串。 cout<<"請輸入一個長度小于100的字符串:"<<endl; cin>>str; /從鍵盤輸入字符存儲到字符數(shù)組中,有輸入則繼續(xù)。 int re=Check(str); if(re=1) cout<<"匹配!"<<endl; if(re=0) cout<<"不匹配!

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論