棧的應用 字尾表示式 括號匹配

2021-08-07 06:49:14 字數 1928 閱讀 7082

一、字尾表示式

在我們日常生活中所見表示式都是中綴表示式,如 「5*(3+7)-4/2」,這中表示式符合我們的思維邏輯,可讀性強,但是不利於計算機的解析。由波蘭邏輯學家j.lukasiewicz發明出字尾表示式,比如上式轉變為字尾表示式」5 3 7 + * 4 2 / -「,這種人類難以適應的表達順序,計算機卻很受用。

1.計算機應用字尾表示式的過程:

如字尾表示式:」5 3 7 + * 4 2 / -」

規則:從左到右遍歷表示式的每乙個數字和符號,遇到數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

①初始化乙個空棧。此棧用來對要運算的數字進出使用。

②字尾表示式中前三個都是數字,所以5,3,7進棧。

③接下來是』+』運算子,將棧頂的兩個元素出棧進行加法運算,再將結果進棧。

④之後是』*』運算子,將棧頂的兩個元素出棧進行運算,將運算結果再進棧。

⑤之後4,2進棧,遇』/』將2,4出棧,2作為除數,4作為被除數。

⑥之後遇』-『,50作為被減數。48入棧,最後出棧,棧為空結果為48.

二、中綴表示式轉字尾表示式

如:中綴表示式」5*(3+7)-4/2」轉為」5 3 7 + * 4 2 / -「

規則:順序遍歷數字和符號,數字輸出,成為字尾表示式的一部分,遇符號則判斷棧頂元素與其的優先順序,若為右括號或者優先順序不高於棧頂元素,則將棧頂元素依次出棧並輸出,並將當前符號進棧,直到字尾表示式輸出完成。

①5輸出,』*』入棧,』(『入棧,3輸出,』+』入棧,7輸出。

輸出:5 3 7

②遇到』)』,則將』(『之前的符號全部出棧輸出。

輸出:5 3 7 +

③遇到』-『,優先順序比棧頂』* 『低,』* 『出棧輸出,』-『進棧。

輸出:5 3 7 + *

④輸出4,遇到』/』比棧頂』-『高,』/』進棧,輸出2,表示式讀取結束,棧內符號依次輸出。

輸出:5 3 7 + * 4 2 / -

中綴表示式轉字尾表示式結束

三、括號匹配

三種配對括號』(『,』)』,』[『,』]』,』』的序列匹配

規則:做乙個空棧,讀入字元直到字串尾。如果讀到的字元為開放符號』(『,』[『,』』,如果棧為空則報錯,否則將棧頂元素彈出,如果不是對應的封閉元素,則報錯,在字串讀取結束,棧不為空則報錯。

如字串: (a)c[b(d)]e(g)

①則順序讀取字元,第乙個字元為』(『開放符號,則將』(『壓棧。

②讀取a,不進行操作,繼而讀取』)』為封閉符號,進行出棧匹配。棧頂元素為』(『是對應的配對符號,則繼續操作…

③直到最後字串讀取完成,檢視top是否為-1。

四、函式棧

是重要知識點,保留。

棧的應用 字尾表示式

我看的是殷人昆版的 資料結構 在棧的應用中,介紹了字尾表示式,下面由我為大家稍微說明下字尾表示式的定義.字尾表示式 也叫rpn或逆波蘭表示式。它是中綴表示式的替代形式。參加運算的運算元總在操作符前面。例如 中綴表示式 a b c d e f 對應的字尾表示式為 abcd ef 詳細的字尾表示式的過程...

棧應用 字尾表示式的計算

有關棧api詳情參看我的還有一篇博文 棧的鏈式儲存 api實現 遍歷字尾表示式中的數字和符號 對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 依據符號進行運算 將運算結果壓入棧中 遍歷結束 棧中的唯一數字為計算結果 include include linkstack.h int i...

棧的應用 表示式括號匹配

時間限制 1000 ms 記憶體限制 65536 kb 假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入 一行資料,即表示式。...