STL 栈(入门题)——— POJ 1363

  1. 我的理解是这道题就是变相的求 :当入栈顺序为1~n时所有可能的出栈顺序,如果这个出栈顺序能够实现,就输出Yes,否则输出No,我们并不需要求所有的出栈顺序,但是我们需要判断给出的出栈顺序是否能够实现,直接进行模拟进栈出栈;
  2. 这道题有一个关键的地方在于,如果你用了STL,那么在执行下一次操作前需要把申请的栈内存清空,否则会造成内存超限;
  3. 还有,每次输入一组数据后,需要输出一个换行符。

代码:

#include<stdio.h>
#include<string>
#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> a;
	int n,b[1005];
	while(scanf("%d",&n)&&n){
		while(1){
			int i=0,j=0,x=0;
			scanf("%d",&b[0]);
			if(b[0]==0)
				break;
			else
				{
				for(i=1;i<n;i++)
					scanf("%d",&b[i]);
			}
				for(int k=1;k<=n;k++){
					a.push(k);
					while(!a.empty()&&a.top()==b[j])
					{
						a.pop();
						j++;
					}
				
				}	
				if(j==n)
					cout<<"Yes"<<endl;
				else
					cout<<"No"<<endl;
				while(!a.empty())
				a.pop();
	}
	printf("\n");
}
	return 0;
}
发布了46 篇原创文章 · 获赞 114 · 访问量 6249

猜你喜欢

转载自blog.csdn.net/GD_ONE/article/details/88959124