對於給定的一個表達式,其中一定會用到大量的左右括號,有小括號,中括號,甚至大括號。如何才能判斷其中的括號是否是一一對應的。所以可以用數據結構中的順序棧來解決這個問題 。在此我就以小括號的匹配為例來說明。在匹配檢查時,我們建立一個空的順序棧。我們從左到右依次的進行檢查,當遇到的是左括號'('時,就讓其進棧。當遇到')'時在將其出棧並且左右括號都划掉。一直到檢查完。如果棧中是空的,則左右括號匹配 反之不匹配。
實現代碼如下:
int match (char exp[],int n)
{
char stack[maxsize];
int top=-1;//定義和初始化一個空棧
int i;
for (i=0;i<n;++i)
{
if(exp[i]=='(';
stack[++top]='(';//如果遇到'(',讓其進棧
if(exp[i]==')')
{
if(top==-1)
return 0;//如果遇到')’,而且棧是空的,則不匹配
else
--top;//棧非空 ,出棧 top-1
}
}
if(top==-1)
return 1;//如果棧空 則括號匹配 返回1
else
return 0;//括號不配 返回0
}