题解
【入门】双向队列
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int a[10005],t=0; //a:存储出错的操作序号;t:记录错误个数 int main( ){ deque<int>q; //双向队列 string s; //s:存储每条操作的命令字符串(LIN/RIN/LOUT/ROUT) int m,x; //m:总操作次数;x:入队时的数字 cin>>m; //读入操作总条数 for(int i=1;i<=m;i++){ //m个操作 cin>>s; //读取命令 if(s=="LIN"){//LIN X:从队头左侧入队 cin>>x; q.push_front(x);//deque头插元素 } else if(s=="RIN"){ //RIN X:从队尾右侧入队 cin>>x; q.push_back(x); //deque尾插元素 } else if(s=="LOUT"){ //LOUT:队头左侧出队 if(q.empty()==1){//队列空,无法出队→操作非法 a[t++]=i; //把当前操作序号i存入错误数组a } else{ q.pop_front();//队列非空,正常弹出队首 } } else if(s=="ROUT"){ //ROUT:队尾右侧出队 if(q.empty()==1){//队列为空不能出队,非法操作 a[t++]=i; } else{ q.pop_back();//正常弹出队尾 } } else{ //既不是LIN/RIN/LOUT/ROUT,不合法 a[t++]=i; } } // 最终队列从左到右所有元素 while(q.empty()!=1){ cout<<q.front()<<" "; //每次取队首输出 q.pop_front(); //输出后弹出队首 } cout<<endl; //错误数组,输出所有非法操作 for(int i=0;i<10000;i++){ if(a[i]!=0){ //非0代表存了错误编号 cout<<a[i]<<" "<<"ERROR"<<endl; } } return 0; }
- 1