知识点:栈
栈是一种常用的先进后出的线性表,只能在一端进行插入或删除操作。表中允许进行插入、删除操作的一端称为栈顶,另一端为栈底。栈中没有数据元素时称为空栈,插入操作称为压栈或进栈,删除操作称为退栈或出栈。
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1022
题目解析:
题目模拟火车站台火车进出顺序,要求第一行输入一个整数表示火车数量,接着输入火车进站顺序和出栈顺序,若能按顺序进出,则输出“yes”,并输出进出顺序,若不能,则输出“no”,结束输出“Finnish”。可用c++的stack容器解决该问题。
使用stack容器要加#include<stack>头文件。操作有:
1.入栈:s.push(x)
2.出栈:s.pop() 注意:出栈操作只是删除栈顶元素,不返回该元素。
3.访问栈顶:s.top()
4.判断栈空:s.empty() 栈为空时为true
5.访问栈中的元素个数:s.size()
解题代码:
#include
#includeusing namespace std;
int main()
{
int n;
char in[100];
char out[100];
int flag[100];
while(cin>>n)
{
cin>>in;
cin>>out;
stack s;
int i=0;
int j=0;
for(i;i<=n;)
{
if(s.empty())
{
s.push(in[i]);
flag[i+j] = 0;
i++;
}
if(!s.empty()&&s.top()!=out[j])
{
s.push(in[i]);
flag[i+j] = 0;
i++;
}
if(!s.empty()&&s.top()==out[j])
{
s.pop();
flag[i+j] = 1;
j++;
}
}
if(s.empty())
{
cout<<"Yes."<<endl;
for(i=0;i<2*n;i++)
{
if(flag[i]!=1) cout<<"in"<<endl;
else cout<<"out"<<endl;
}
cout<<"FINISH"<<endl;
}
else
{
cout<<"NO"<<endl;
cout<<"FINISH"<<endl;
}
}
return 0;
}
网友评论