STL 队列练习

来源:互联网 发布:软件外包公司销售 编辑:程序博客网 时间:2024/05/06 09:59

codevs 3185
题目描述 Description

给定一个队列(初始为空),只有两种操作入队和出队,现给出这些操作请输出最终的队头元素。 操作解释:1表示入队,2表示出队
输入描述 Input Description

N(操作个数)
N个操作(如果是入队则后面还会有一个入队元素)
具体见样例(输入保证队空时不会出队)
输出描述 Output Description

最终队头元素,若最终队空,输出”impossible!”(不含引号)

样例输入 Sample Input

3
1 2
1 9
2
样例输出 Sample Output

9

#include<iostream>#include<queue>using namespace std;int a[1001];int head=0,tail=0;int y;queue<int>q;int main(){    int t,cz,p;    cin>>t;    while(t--)    {        cin>>cz;        if(cz==1)        {            cin>>p;            q.push(p);        }        if(cz==2)        {            q.pop();        }    }    if(q.empty()) cout<<"impossible!"<<endl;    else cout<<q.front()<<endl;    return 0;}

手打版

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[1001]={0},n,t,m,head,tail;bool empty( );int front( );int push(int i){    a[tail]=i;    ++tail;}int front(){    ++head;}bool empty(){    if(head>=tail)      return 0;    else return 1;}      int main(){    head=0;    tail=0;    cin>>n;    for(int i=1;i<=n;++i)       {          cin>>t;          if(t==1)            {                cin>>m;                push(m);            }          else front();       }    if(empty()==0)       cout<<"impossible!"<<endl;    else cout<<a[head]<<endl;    return 0;}

codevs 3186
题目描述 Description

(此题与队列练习1相比改了2处:1加强了数据 2不保证队空时不会出队)
给定一个队列(初始为空),只有两种操作入队和出队,现给出这些操作请
输出最终的队头元素。 操作解释:1表示入队,2表示出队
输入描述 Input Description

N(操作个数)
N个操作(如果是入队则后面还会有一个入队元素)
具体见样例(输入保证队空时不会出队)
输出描述 Output Description

最终队头元素,若最终队空,或队空时有出队操作,输出”impossible!”(不含引号)

样例输入 Sample Input

3
1 2
2
2
样例输出 Sample Output

impossible!

#include<cstdio>#include<queue>using namespace std;queue<int> q;bool f=0;int n,a,b;int main(){     scanf("%d",&n);  for (int i=1;i<=n;++i)  {    scanf("%d",&a);    if (a==1)    {       scanf("%d",&b);       q.push(b);    }    if (a==2)    {      if (q.empty())      {      f=1;      }      else      {      q.pop();      }    }  }  if (q.empty()||f)  printf("impossible!");  else  printf("%d",q.front());  return 0;}

手打版

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[1001]={0},n,t,m,head,tail;bool empty( );int front( );int push(int i){    a[tail]=i;    ++tail;}int pop(){    ++head;}bool empty(){    if(head>=tail)    return 0;    else return 1;}      int main(){    head=0;    tail=0;    cin>>n;    for(int i=1;i<=n;++i)       {          cin>>t;          if(t==1)            {                cin>>m;                push(m);                if(!empty()) break;            }          else pop();       }    if(empty()==0)     cout<<"impossible!"<<endl;    else cout<<a[head]<<endl;    return 0;}

codevs 3187
题目描述 Description

比起第一题,本题加了另外一个操作,访问队头元素(编号3,保证访问队头元素时或出队时队不为空),现在给出这N此操作,输出结果。
输入描述 Input Description

N
N次操作(1入队 2出队 3访问队头)
输出描述 Output Description

K行(K为输入中询问的个数)每次的结果
样例输入 Sample Input

6
1 7
3
2
1 9
1 7
3
样例输出 Sample Output

7
9

#include<iostream>#include<queue>using namespace std;bool f=0;queue<int>q;int main(){    int n,x,cz;    cin>>n;    while(n--)    {        cin>>x;        if(x==1)        {            cin>>cz;            q.push(cz);        }        if(x==2)        {            q.pop();        }        if(x==3)        cout<<q.front()<<"\n";    }    return 0;   }

手打版

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[1000001]={0},n,t,m,head,tail;bool empty( );int front( );int printf(){    if(empty()==0)     cout<<"impossible!"<<endl;    else cout<<a[head]<<endl;}int push(int i){    a[tail]=i;    ++tail;}int pop(){    ++head;}bool empty(){    if(head>=tail)    return 0;    else return 1;}      int main(){    head=0;    tail=0;    cin>>n;    for(int i=1;i<=n;++i)       {          cin>>t;          if(t==1)            {                cin>>m;                push(m);            }          if(t==2) pop();          if(t==3) printf();        }    return 0;}
0 0