/*栈的模板可以用数组,单链表,以及stack堆栈来实现 */
/*建议电脑查看*/
#include <cstdio>
#include <stack> /*堆栈*/
using namespace std;
void print( stack<int> a, int n );
void clear( stack<int> b ); /*清空*/
int main()
{
stack<int> s; /*定义一个堆栈类型变量*/
int number;
int out[5] = { 2,3,5,4,1, };
int index = 0;
int i, j, k, n;
/* 输入 1 2 3 4 5 判断有没有可能输出是 2 3 5 4 1 */
scanf("%d", &n ); //下一行输入n个元素
for( i=0; i<n; i++ ){
scanf("%d", &number );
s.push( number ); //将输入的数压入栈顶
if( s.top() == out[index] ){ //判断栈顶元素是否与将要输出的元素是否相等
while( 1 ){ //加一层循环
printf("%d ", s.top() ); //输出栈顶元素
s.pop(); //弹出栈顶元素
index ++; //数组下标加一,指向下一个将要输出的元素
/*判断数组是否越界以及栈顶元素是否等于将要输出的元素*/
if( index>=5 || s.top() != out[index] )
break; //不等则终止循环
}
}
}
printf("\n");
if( s.empty() ) //判断堆栈是否为空
printf("Yes\n");
else{
clear( s ); //清空
printf("No\n");
}
for( i=0; i<6; i++ )
s.push( i );
print( s, s.size() ); //遍历输出,自栈顶向下
//printf("\n");
printf("%d\n", s.size() ); //返回并输出元素个数
return 0;
}
void print( stack<int> a, int n ) //不会改变主函数的堆栈
{
int i;
for( i=0; i<n; i++ ){
printf("%d ", a.top() );
a.pop();
}
printf("\n");
}
void clear( stack<int> b )
{
while( b.size() )
b.pop();
}