数据结构——栈
2015-07-21 14:18
239 查看
题目标题:Rails 铁轨
题目来源:UVa 514
题目大意:给出一个整数n,然后将从1~n逐个入栈,但是不知道是何时出栈,下面给出n行,每一行代表一种可能的出栈序列,要求如果能够符合出栈序列,输出YES,否则输出NO。直到输入0结束。
首先给出代码。
定义了一个栈s,并定义了A,B两个变量,其中A代表的是入栈序列,B则代表了出栈序列。当B小于n的时候,即还有剩余元素未出栈。
如果A等于输入的序列中第B个数,那么A和B同时加一,表示此时的出栈序列是对的,如果s不为空,即栈中还有元素没出栈,并且栈顶元素等于输入序列中第B个数,那么此时的出栈序列也是对的,B加一。如果不满足上述两个条件的话,只能先把A入栈,等待下一次判断是否能将A出栈了。如果A>n了,此刻已经不会再满足出栈序列了,此时应该结束循环,并且返回一个0,输出No,表示输入的出栈序列不可能实现。
题目来源: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,表示输入的出栈序列不可能实现。
相关文章推荐
- 数据结构—栈
- 宝典——数据结构和设计模式
- 数据结构学习笔记(1)
- 数据结构与算法-为什么要使用算法
- 数据结构与算法-为什么要使用算法
- 数据结构导论
- 扩充的数据结构-Order Statistic Tree
- 基础数据结构priority_queue用法
- Java数据结构-线性表之队列
- Java数据结构-线性表之栈(顺序栈和链栈)
- 数据结构(一):数据结构的基本概念和算法的时间和空间复杂度
- 课程笔记 06:数据结构(清华) 列表-节点
- MySQL索引背后的数据结构及算法原理
- 1619 - Feel Good(高效算法-利用数据结构优化-优先队列)
- 数据结构专题
- [c] HDOJ1053 哈夫曼树的应用
- 数据结构和设计模式03(排序)
- 数据结构 线性插入元素
- 课程笔记 05:数据结构(清华) 向量-排序
- STL中map的数据结构