您的位置:首页 > 理论基础 > 数据结构算法

数据结构——栈

2015-07-21 14:18 239 查看
题目标题:Rails 铁轨

题目来源:UVa 514

题目大意:给出一个整数n,然后将从1~n逐个入栈,但是不知道是何时出栈,下面给出n行,每一行代表一种可能的出栈序列,要求如果能够符合出栈序列,输出YES,否则输出NO。直到输入0结束。

首先给出代码。

# include <iostream>
# include <stack>
using namespace std;
int n , target[1001];
int main()
{
while(cin>>n)
{
if(n==0)
break;
bool key=true;
while(key)
{
stack<int> s ;
int A = 1, B = 1;
for(int i=1;i<=n;i++)
{
cin>>target[i];
if(target[1]==0)
{
key=false;
break;
}
}
int ok=1;
while(B<=n)
{
if(A == target[B])
{
A++;
B++;
}
else if(!s.empty()&&s.top() == target[B])
{
s.pop();
B++;
}
else if(A<=n)
s.push(A++);
else
{
ok=0;
break;
}
}
if(key)
if(ok)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}


定义了一个栈s,并定义了A,B两个变量,其中A代表的是入栈序列,B则代表了出栈序列。当B小于n的时候,即还有剩余元素未出栈。

如果A等于输入的序列中第B个数,那么A和B同时加一,表示此时的出栈序列是对的,如果s不为空,即栈中还有元素没出栈,并且栈顶元素等于输入序列中第B个数,那么此时的出栈序列也是对的,B加一。如果不满足上述两个条件的话,只能先把A入栈,等待下一次判断是否能将A出栈了。如果A>n了,此刻已经不会再满足出栈序列了,此时应该结束循环,并且返回一个0,输出No,表示输入的出栈序列不可能实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: