##1、括號匹配問題:
解決思路:
ch = topnumandtop (&s);//返回棧頂元素並出棧
switch (ch)
break;
case '[':
if (per[i] != ']')
break;
case '')
break;
}} }
if (isempty (&s) == 1) //判斷棧是否為空(等1為空,等0不為空)
else
}測試**:
void test_match_brackets() //括號匹配問題
}";//右括號比左括號多
char arr2 = "(())abc";//左右括號次序匹配錯誤
char arr3 = "(())abc"; //左右括號匹配正確
char arr4 = "(())abc"; //左括號比右括號多
matchbrackets (arr1);
matchbrackets (arr2);
matchbrackets (arr3);
matchbrackets (arr4);
}
執行結果:
###2、逆波蘭表示式求值
####什麼是逆波蘭表示式:
逆波蘭表示法也叫字尾表示法,即操作符號都置於運算元的後面,逆波蘭表示法可以不用括號來標識操作符的優先順序。例如:3+4 是乙個中綴表示式,轉換成逆波蘭表示式為34+
思路:
int reversepolishexpression (const char* str) //逆波蘭表示式求值
if (*arr == ' ' && *p1 != ' ')
if ((*arr == '+') || (*arr == '-') || (*arr == '*') || (*arr == '/'))
}arr++;
} return topnumandtop (&s);
}
測試**:
void test_reversepolishexpression ()//逆波蘭表示式
執行結果:
棧解決 括號匹配問題和逆波蘭表示式
所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...
c 解決括號匹配及逆波蘭表示式
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。思路 當棧為空時入棧,沒遇到左括號時一直入棧。當出現左括號時比較與棧頂元素是否匹配,如果匹配則出棧。在完成後如果棧仍然不為空則說明存在不互相匹配的括號。include includ...
括號匹配 逆波蘭函式(棧)
1.括號匹配 int isbrackets char ch 判斷括號函式 ch return0 void matchbrackets const char str ch stacktop s if ch str i ch str i str i 檢測當前括號是否與棧頂括號匹配 stackpop s ...