出栈合法性(acm模式,中等)

出栈合法性(acm模式,中等)_第1张图片

较为困难的是如何选择算法进行合法性判断,最后是采用时时验证(边压栈边出栈)来判断合法性 

#include
#include
#include
using namespace std;
int main()
{
    int n;
    int num[105];
    while(cin>>n)
    {
        if(n==0)
            break;
        for(int index=0;index>num[index];
        }
        stack st;
        int index=0;
        for(int i=1;i<=n;i++)//判断栈的合法性
        {
            st.push(i);//按题目顺序从1到N进行压栈
            while(!st.empty()&&st.top()==num[index])//遇到合适相等的出栈,注意使用的是while循环
            {
                st.pop();
                index++;//index变化,接着判断下一个输入的数字
            }
        }
        if(st.empty()&&index==n)//如果st全部出栈,就是合法
            cout<<"Yes"<

  可以使用这一句接近num数组的动态创建问题

vector num= vector(n, 0); 

你可能感兴趣的:(acm,算法,c++,数据结构)