分析: 栈是一种只允许在一端进行插入和删除的线性表,具有”后进先出“的特点;与此对立, 队列是一种只允许在一端进行插入并且在另一端删除的线性表,具有”先进先出“的特点。栈的在实际生活中有着很多的应用,如括号匹配、进制转换、迷宫求解、递归、函数或过程的调用等;队列在生活中也有着很多的应用,如打印缓冲区数据、CPU处理请求的顺序等。此题要介绍的是栈的应用中的括号匹配问题。
思路: 依次扫描每个字符,如果该字符是花括号、中括号、圆括号的左括号时,则把该字符进栈;如果如果该字符是花括号、中括号、圆括号的右括号时,检查栈顶元素是否是相应的左括号,若是,则退栈,否则匹配错误。另外,如果栈不为空,匹配也为错误。代码如下:
bool check(char *str)//传入参数为一个指针
{
InitStack(s);
int i=0;
while(i!=0)
{
switch (str[i])
{
//遇到左括号时
case '(': push(s,str[i]);
break;
case '[': push(s,str[i]);
break;
case '{': push(s,str[i]);
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;
default:
break;
}
i++;//使函数依次向后遍历
}
//指针所指内容已经完全遍历完
if(!isEmpty(s))//若此时栈不为空
{
cout<<"不匹配";
return fasle;
}else{
cout<<"成功匹配";
return true;
}
}