括号配对问题
1.基本思想
栈的应用:
算法思想
1.顺序扫描字符串
2.当栈为空的时候该字符入栈
3.当该字符与栈顶字符匹配时退出栈顶,否则入栈
4.当字符串扫描完时判断栈是否为空,栈为空就说明括号匹配,否则括号不匹配
2.c语言代码实现
#include<cstdio>
//cstdio是标准C++
//cstdio是将stdio.h的内容用C++头文件的形式表示出来
//cstdio中的函数都是定义在一个名称空间std里面的
//如果要调用这个名字空间的函数 必须得加std::
或者在文件中声明using namespace std
#include<stack>
//C语言中引用栈的头文件格式
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
char s[10001];
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int len=strlen(s);
if(len%2!=0)
printf("No\n");
else
{
stack<char> q; //声明栈q
for(int i=0; i<len; i++)
{
if(q.empty())
q.push(s[i]); //元素进栈
else if(s[i]==']'&&q.top()=='[')
{
q.pop(); //栈顶元素出栈
}
else if(s[i]==')'&&q.top()=='(')
{
q.pop();
}
else
q.push(s[i]);
}
if(q.empty())
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}