棧的應用舉例:括號匹配(C#)
阿新 • • 發佈:2018-12-13
假設表示式允許包含兩種括號:圓括號和方括號,其巢狀的順序隨意,即[ ( [ ] ( ) ) ]等為正確的格式,[ ( ]或( ( [ ) )為錯誤的格式。檢驗括號是否匹配的方法可用“期待的急迫程度”這個概念描述。 當計算機接收左括號時,括號入棧,當計算機接收右括號時,取得棧頂元素,並檢查是否和左括號匹配,]對應[,)對應(,若匹配,則出棧。因此當程式的開始和結束時,棧都應該是空的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { string s = "[([]())]"; string ss = "[([)]]"; Stack<char> newstack = new Stack<char>(); foreach (char ch in ss) { switch (ch) { case '['://左括號,入棧 newstack.Push(ch); break; case '('://左括號,入棧 newstack.Push(ch); break; case ')': if (newstack.Peek() == '(') { newstack.Pop();//出棧 } break; case ']': if (newstack.Peek() == '[') { newstack.Pop();//出棧 } break; } } if (newstack.Count == 0) { Console.WriteLine(s + "格式正確"); } else { Console.WriteLine(s+"格式錯誤"); } Console.ReadLine(); } } }