棧的應用 括號匹配

2021-08-19 01:41:39 字數 2554 閱讀 4629

3.1棧的應用—括號匹配

一、實驗目的1.掌握堆疊特殊線性表的儲存方式的基本操作方法。

2.掌握堆疊後進先出運算原則在解決實際問題中的應用。

3.掌握使用棧的原理來解決表示式中的括號配對問題。

二、實驗內容

假設乙個算術表示式中包含圓括弧、方括弧三種型別的括弧,編寫乙個程式用於判別表示式中括弧是否正確配對。

說明:檢驗表示式中的括號匹配情況:假設在乙個算術表示式中,可以包含三種括號:圓括號"("和")",方括號"["和"]",並且這兩種括號可以按任意的次序巢狀使用。比如,...[......[...]...]...(...)..。現在需要設計乙個演算法,用來檢驗在輸入的算術表示式中所使用括號的合法性。

算術表示式中各種括號的使用規則為:出現左括號,必有相應的右括號與之匹配,並且每對括號之間可以巢狀,但不能出現交叉情況。我們可以利用乙個棧結構儲存每個出現的左括號,當遇到右括號時,從棧中彈出左括號,檢驗匹配情況。在檢驗過程中,若遇到以下幾種情況之一,就可以得出括號不匹配的結論。

(1)當遇到某乙個右括號時,棧已空,說明到目前為止,右括號多於左括號;

(2)從棧中彈出的左括號與當前檢驗的右括號型別不同,說明出現了括號交叉情況;

(3)算術表示式輸入完畢,但棧中還有沒有匹配的左括號,說明左括號多於右括號。

演算法步驟:掃瞄表示式,

1)凡出現左括弧,則進棧;

2)凡出現右括弧,首先檢查棧是否空。

若棧空,則表明該「右括弧」多餘

否則和棧頂元素比較,

若相匹配,則「左括弧出棧」

否則表明不匹配

3)表示式檢驗結束時,

若棧空,則表明表示式中匹配正確

否則表明「左括弧」有餘

棧的型別定義及基本操作**可參考教材相關定義和程式。

三、實驗源**

四、實驗結果

演算法邏輯根據題目提示來就行了,由於特定題目所以沒有對書上的一些**進行了修改,比如沒有在彈出棧頂的時候設定變數儲存棧頂,直接下移棧頂指標(因為此題彈出的棧頂並沒有用了)

在編寫過程中遇到的若干問題:

0、switch函式的具體格式忘記了,以至於報了很多格式上的錯誤;

1、特別注意switch函式中多處判斷的邏輯

2、對於中括號在小括號中間這種情況並沒有檢測出來並報錯(如"()"),**還有進一步改進的空間

ps:編譯完成後並沒有進行多少資料測試,如若有bug還請批評指出!

#include#include#include#define  maxsize 100

//封裝順序棧

typedef structseqstack,*pseqstack;

//初始化空棧

pseqstack init()

}//判空

int empty(pseqstack s)

//出棧

int pop(pseqstack s)

}//取棧頂元素

char gettop(pseqstack s)

}//銷毀棧

void destory(pseqstack *s) }

//入棧

int push(pseqstack s,char x)

else }

void judge(pseqstack s,char str)

int i;

for(i=0; str[i]!='\0'; i++)

//棧不空,驗證是否匹配

else

else

} break;

case ']':

//若棧空出現乙個右括號,則直接return

if(empty(s))

//棧不空,驗證是否匹配

else

else

} break;

default: break;

} }

//結束迴圈判斷棧是否空,空則匹配成功

if(empty(s))

else

printf("匹配失敗");

}void main()

棧應用 括號匹配

假設表示式中允許包含兩種括號 圓括號和方括號。編寫乙個演算法判斷表示式中的括號是否正確配對。由括號構成的字串,包含 如果匹配輸出yes,否則輸出no。複製 yes解決思想 拿到字串後,遍歷字串,當遇到左括號就進棧,右括號棧頂元素出棧,如果括號是匹配的,則最終棧空。include includetyp...

棧的應用 括號匹配

description 在實際程式設計中,我們經常會巢狀使用括號,如 如果括號太多,可能會出現括號不匹配的情況,比如 as 等。現希望你們編寫乙個程式,判斷輸入的一段語句中的括號是否匹配。必須使用棧實現這個功能。input 字串s,s是由 以及數字字母組成的字串。output 若括號使用規範且匹配,...

棧的應用(括號匹配)

棧的應用 括號匹配有兩種,一種是只用匹配一種型別的括號的,還有一種是要多種都匹配 棧的應用,括號的匹配問題 簡單的括號匹配 只有一中型別的括號 include include include include using namespace std 初始化棧 bool match string str...