2018-01-21

2018-01-25  本文已影响0人  Gleisure

知识点:栈

       栈是一种常用的先进后出的线性表,只能在一端进行插入或删除操作。表中允许进行插入、删除操作的一端称为栈顶,另一端为栈底。栈中没有数据元素时称为空栈,插入操作称为压栈或进栈,删除操作称为退栈或出栈。

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1022

题目解析:

题目模拟火车站台火车进出顺序,要求第一行输入一个整数表示火车数量,接着输入火车进站顺序和出栈顺序,若能按顺序进出,则输出“yes”,并输出进出顺序,若不能,则输出“no”,结束输出“Finnish”。可用c++的stack容器解决该问题。

使用stack容器要加#include<stack>头文件。操作有:

1.入栈:s.push(x)

2.出栈:s.pop()     注意:出栈操作只是删除栈顶元素,不返回该元素。

3.访问栈顶:s.top()

4.判断栈空:s.empty()  栈为空时为true

5.访问栈中的元素个数:s.size()

解题代码:

#include

#includeusing namespace std;

int main()

   int n;

   char in[100]; 

   char out[100]; 

   int flag[100];

  while(cin>>n) 

 {

      cin>>in;

      cin>>out;

      stack s;

       int i=0;      

       int j=0;      

       for(i;i<=n;)

       {

            if(s.empty())  

            {

                s.push(in[i]);

                flag[i+j] = 0;

                i++;          

            }

            if(!s.empty()&&s.top()!=out[j])

            {

                s.push(in[i]);

                flag[i+j] = 0;

                i++;

            }

            if(!s.empty()&&s.top()==out[j])

            {

                s.pop();

                flag[i+j] = 1;

                j++;

            }                           

        }

        if(s.empty())                    

        {

            cout<<"Yes."<<endl;

            for(i=0;i<2*n;i++)

            {

                if(flag[i]!=1)    cout<<"in"<<endl;

                 else   cout<<"out"<<endl;

             }

             cout<<"FINISH"<<endl;

        }

  else

  { 

      cout<<"NO"<<endl;

      cout<<"FINISH"<<endl;

  }

}

return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读