1. 程式人生 > >棧的應用舉例:括號匹配(C#)

棧的應用舉例:括號匹配(C#)

假設表示式允許包含兩種括號:圓括號和方括號,其巢狀的順序隨意,即[ ( [ ] ( ) ) ]等為正確的格式,[ ( ]或( ( [ ) )為錯誤的格式。檢驗括號是否匹配的方法可用“期待的急迫程度”這個概念描述。 當計算機接收左括號時,括號入棧,當計算機接收右括號時,取得棧頂元素,並檢查是否和左括號匹配,]對應[,)對應(,若匹配,則出棧。因此當程式的開始和結束時,棧都應該是空的。

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();
        }
    }
}