数据结构算法——判断表达式中的括号是否匹配
元旦三天假,閑著沒(méi)事干,就想著復(fù)習(xí)一下學(xué)數(shù)據(jù)結(jié)構(gòu)時(shí)的那些算法吧。本來(lái)是想用C語(yǔ)言來(lái)寫(xiě)的,無(wú)奈啊,三四年沒(méi)用C了,基本上忘光光,還是用C#來(lái)寫(xiě)吧,而且.Net基類(lèi)庫(kù)中已經(jīng)有了棧、隊(duì)列等的實(shí)現(xiàn),直接拿來(lái)用用吧。第一個(gè)算法是用來(lái)判斷表達(dá)式中的括號(hào)(僅限小括號(hào))是否匹配的。(其實(shí)哥很想找個(gè)妹子出去約會(huì)啊,不想復(fù)習(xí)神馬算法啊,可惜的是找不到妹子,哭死)
? ? ?對(duì)于表達(dá)式中的括號(hào)是否匹配,不能僅僅通過(guò)統(tǒng)計(jì)左括號(hào)'('出現(xiàn)的次數(shù)和右括號(hào)')'出現(xiàn)的次數(shù)是否相等來(lái)實(shí)現(xiàn),“a*)b+c(”這樣的表達(dá)式中的括號(hào)顯然是不匹配的。檢驗(yàn)括號(hào)是否匹配最常見(jiàn)的方法是借助于棧這種數(shù)據(jù)結(jié)構(gòu),從左到右逐個(gè)字符掃描表達(dá)式,碰到左括號(hào)"("則壓入棧中(push),碰到右括號(hào)")"則彈出棧頂元素(pop)如果棧為空,則匹配失敗。字符串掃描完成后,如果棧為空,則匹配成功,否則匹配失敗。代碼如下:
public static class AlgorithmAboutStack{
/// <summary>
/// 此方法用于判斷輸入的表達(dá)式中的括號(hào)是否匹配,即左括號(hào)的個(gè)數(shù)與右括號(hào)是否相等
/// </summary>
/// <param name="expression">輸入的表達(dá)式</param>
/// <returns></returns>
public static bool IsBracketMatch(string expression)
{
if (string.IsNullOrEmpty(expression))
{
throw new ArgumentException();
}
Stack<char> leftBrackets = new Stack<char>();
foreach (char c in expression)
{
if (c=='(')
{
leftBrackets.Push(c);
}
if (c==')')
{
if (leftBrackets.Count==0)
{
return false;
}
else
{
leftBrackets.Pop();
}
}
}
return leftBrackets.Count == 0;
}
} http://www.cnblogs.com/onepiece_wang/archive/2012/01/01/2309535.html
轉(zhuǎn)載于:https://www.cnblogs.com/sjqq/p/8717503.html
總結(jié)
以上是生活随笔為你收集整理的数据结构算法——判断表达式中的括号是否匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站如何从http升级成https
- 下一篇: 创新之短视频风口