1466双向队列SDUT

#include<bits/stdc++.h>
using namespace std;
const int N=20005;
int main()
{
    int queue_[N],error[N];
    char str[5];
    int n,data;
    int mid=10000,l=mid,r=mid,k=0,flag=0;         //双向队列数组模拟,用中值代表起始位置,用r,l代表右边和左边,fllag的作用有确定起始位置,还有错误的判断
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>str;
        if(strcmp(str,"LIN")==0)
        {
            cin>>data;
            if(flag==0)
            {
                flag=1;
                queue_[l]=data;
            }
            else
                queue_[--l]=data;
        }
        else if(strcmp(str,"RIN")==0)
        {
            cin>>data;
            if(flag==0)
            {
                flag=1;
                queue_[r]=data;
            }
            else
                queue_[++r]=data;
        }
        else if(strcmp(str,"LOUT")==0)
        {
            if(flag==0)
                error[++k]=i;
            else if(l<=r)
                l++;
            else if(l>r)
                error[++k]=i;
        }
        else if(strcmp(str,"ROUT")==0)
        {
            if(flag==0)
                error[++k]=i;
            else if(r>=l)
                r--;
            else if(r<l)
                error[++k]=i;
        }
    }
    for(int i=l;i<=r;i++)
    {
        if(i==r)
            cout<<queue_[i]<<endl;
        else
            cout<<queue_[i]<<" ";
    }
    if(k)
    {
        for(int i=1;i<=k;i++)
            cout<<error[i]<<" "<<"ERROR"<<endl;
    }
    return 0;
}
//又学到了一个知识点,祝看到此篇博客的人越努力,越幸运

猜你喜欢

转载自blog.csdn.net/weixin_43824158/article/details/85058727