ACM-栈

ACM- 栈

栈的定义:栈是一种只能在一端进行的插入或删除操作的线性表。表中允许进行插入,删除操作的一端称为栈顶,栈的另一端称为栈底。

栈的特点:后进先出

C++标准库中的基本使用方法:

栈的头文件

#include <stack>

定义栈,以如下形式实现:stack<type> s;其中type为数据类型(如int,fioat,char等)

常用操作有:

s.push(item); //将item压入栈顶
s.pop();         //删除栈顶的元素,但不会返回
s.top();          //返回栈顶的元素,但不会删除
s.size();         //返回栈中元素的个数
s.empty();      //检查栈是否为空,如果为空返回true,否则返回false

栈的使用:

杭电1022(栈的使用)

AC代码:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
    int n;
    char in[100];
    char out[100];
    int flag[100];  //记录判断进站还是出站的标志
    while(cin>>n)
    {
        cin>>in;
        cin>>out;
        stack<char> s;//模拟站台的栈
        int i=0;      //i代表进站序列的对应列车
        int j=0;      //j代表出站序列的对应列车
        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;
}

 

posted @ 2018-01-24 17:15  jazyer  阅读(102)  评论(0编辑  收藏  举报