1.题目:判断一个表达式中的小括号是否配对,表达式存在字符数组exp[]中,字符个数为n。
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] = exp[i];
if(exp[i] == ')')
{
if(top == -1)//检查栈是否为空,为空则不匹配
return 0;
else
top--; //若栈不空,出栈
}
}
if(top == -1)
return 1;
else
return 0;
}
2.题目: 假设一个算术表达式中含圆括号、方括号和花括号三种类型括号,判断表达式中括号是否配对,算术表达式以’\0’作为结束符。
int match(char *str)
{
InitStack(s);
int i;
for(i=0;str[i]!='\0';++i)
{
switch (str[i])
{
case '(':Push(s,'(');break;
case '[':Push(s,'[');break;
case '{':Push(s,'{');break;
case ')':
Pop(s,e);
if(e != ')')
return false;break;
case ']':
Pop(s,e);
if(e != ']')
return false;break;
case '}':
Pop(s,e);
if(e != '}')
return false;break;
}
}
if(IsEmpty(s))
return true;
else
return false;
}