ny02 括号配对问题
程序员文章站
2022-06-01 17:14:17
...
1.队列(先进先出)
Queue
queue 模板类的定义在<queue>头文件中。
所以需要写上 #include<queue>
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。!!!!一定要记住啊!!!!
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。(有的时候要和q.pop()一起使用)
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
2.栈(stack):
c++ stl栈stack的头文件为:
#include<stack>
stack<int> S;//声明一个对象
S.empty();//栈空返回true 否则false
int x=S.size();//返回栈中元素个数于x
S.pop();//移除栈顶元素(pop之前一定要注意,它是不是栈为空啊!!)
S.push(x);将x置于栈顶
x=S.top();返回栈顶元素
3.因为>>没有重载字符串,所以要加#include <string>
4.像这种输出一块的,输入一块的,用数组解决,这次的判断,我用了bool类型的数组!
#include<iostream>
#include <stack>
#include <string>//>>没有重载字符串的,必须要增加#include <string>
using namespace std;
int main()
{
stack<char> q;
int n,num=0;
cin>>n;
bool check[100];
while(n--)
{
string s;
cin>>s;
int len=0;
check[num]=true;
for(int i=0;i<s.length();i++)
{
//如果你''单引号中有多个字符,就会显示数字,把它当作ascii码
switch(s[i])
{
case '[':q.push(s[i]);len++;break;
case '(':q.push(s[i]);len++;break;
case ']':if(len!=0)
{
if(q.top()=='[')
{q.pop();len--;break;}
else check[num]=false;break;
}
else check[num]=false;
case ')':if(len!=0)
{
if(q.top()=='(')
{q.pop();len--;break;}
else check[num]=false;break;
}
else check[num]=false;
}
}
if(len!=0)
check[num]=false;
num++;
}
for(int i=0;i<num;i++)
{
if(check[i]==true)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
下一篇: 用Java操作数据库并实现CRUD操作一