双端队列篇deque SDUT OJ 双向队列

双向队列

Time Limit: 1000MS Memory limit: 65536K

题目描述

想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
现在给你一系列的操作,请输出最后队列的状态;
命令格式:
LIN X  X表示一个整数,命令代表左边进队操作;
RIN X  表示右边进队操作;
ROUT
LOUT   表示出队操作;

输入

第一行包含一个整数M(M<=10000),表示有M个操作;
以下M行每行包含一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;

输出

输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
以下若干行处理不合法的命令(如果存在);
对于不合法的命令,请输出一行X ERROR
其中X表示是第几条命令;

示例输入

8
LIN 5
RIN 6
LIN 3
LOUT
ROUT
ROUT
ROUT
LIN 3

示例输出

3
7 ERROR

 双端队列的典型操作模拟题!一开始读错题了,WA一次! 注意:先输出处理完这m条命令后 队列里还有什么数据, 然后再依次输出报错的指令信息!
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <map>
#include <stack>
#include <deque> //双端队列
#include <algorithm>
#include <ctype.h>

using namespace std;

int a[20000], e;

int main()
{
    int m;
    cin>>m;
    int i, j, dd;
    string s;
    deque<int>q;
    deque<int>::iterator it;

    for(i=1; i<=m; i++)
    {
        cin>>s;
        if(s=="LIN")
        {
            cin>>dd;
            q.push_front(dd);
        }
        else if(s=="RIN")
        {
            cin>>dd;
            q.push_back(dd);
        }
        else if(s=="LOUT")
        {
            if(q.empty())
            {
                a[e++]=i;
            }
            else
            {
                q.pop_front();
            }
        }
        else if(s=="ROUT")
        {
            if(q.empty())
            {
                a[e++]=i;
            }
            else
            {
                q.pop_back();
            }
        }
    }

    int flag=0;
    for(it=q.begin(); it!=q.end(); it++)
    {
        if(flag==0)
        {
            printf("%d", *it );
            flag=1;
        }
        else if(flag==1)
        {
            printf(" %d", *it );
        }
    }

    if(flag==1)
    {
        printf("\n");  //如果flag==1 就表示最后状态的队列里还有数据,输出完这些数据后就要输出换行! 如果flag==0, 则没有必要换行了!
    }
    for(j=0; j<e; j++)
    {
        printf("%d ERROR\n", a[j] );
    }
    return 0;
}
 
时间: 2024-12-09 23:44:23

双端队列篇deque SDUT OJ 双向队列的相关文章

SDUT 1466 双向队列

双向队列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首:两头都可以做出队,入队的操作.现在给你一系列的操作,请输出最后队列的状态:命令格式:LIN X  X表示一个整数,命令代表左边进队操作:RIN X  表示右边进队操作:ROUTLOUT   表示出队操作: Input 第一行包含一个整数M(M<=10000),表示有M个操作:以下M行每行

[泛型]队列,栈,简单双向队列的实现

写了个栈和队列以及简化的deque模版. Stack: 1 #ifndef _KIRAI_STACK 2 #pragma once 3 4 #include <cstdlib> 5 6 namespace kirai { 7 template <class Type> 8 struct Node { 9 typedef Node<Type>* NP; 10 Type data; 11 NP pre; 12 Node<Type>() { pre = NULL;

Python collections系列之双向队列

双向队列(deque) 一个线程安全的双向队列 1.创建一个双向队列 import collections d = collections.deque() d.append('1') d.appendleft('10') d.appendleft('a') d.appendleft('1') 2.查看双向队列 print(d) 输出结果: deque(['1', 'a', '10', '1']) 3.查看双向队列的方法 >>> dir(d) ['__class__', '__copy__

C++ Double Ended Queues(双向队列)

双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样). Constructors 创建一个新双向队列 Operators 比较和赋值双向队列 assign() 设置双向队列的值 at() 返回指定的元素 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 返回真如果双向队列为空 end() 返回指向尾部的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator()

PHP双向队列,双端队列代码

<?php /**  * User: jifei  * Date: 2013-07-30  * Time: 23:12 */ /**  * PHP实现双向队列,双端队列  * 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构.  * 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行.  */ class Deque {     public $queue=array();     /**      * 构造函数初始化队列     

stl之deque双端队列容器

deque与vector很相似,不仅能够在尾部插入和删除元素,还能够在头部插入和删除. 只是当考虑到容器元素的内存分配策略和操作性能时.deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有不论什么元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象.每一个元素採用它的类型下的默认值. deque<int> d(

deque双端队列容器(对象创建,数组、迭代器方式访问,元素的赋值、插入、删除等)

deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除.不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有任何元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象,每个元素采用它的类型下的默认值. deque<int> d(10)

nyoj1117 鸡蛋队列 (双端队列,deque)

题目1117 题目信息 运行结果 本题排行 讨论区 鸡蛋队列 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 将两根筷子平行的放在一起,就构成了一个队列.将带有编号的鸡蛋放到两根筷子之间叫做入队(push),将筷子之间的鸡蛋拿出来叫做出队(pop).但这两种方式有特殊的定义,对于入队,只能将鸡蛋从队列的尾部向里放入:对于出队,只能将鸡蛋从队列的头部向外将鸡蛋拿出来. 将①.②入队: 头____________尾                         ___

C++ STL 双端队列deque详解

一.解释 Deque(双端队列)是一种具有队列和栈的性质的数据结构.双端队列的元素可以从两端弹出,其限定插入和删除操作在表的两端进行. 二.常用操作: 1.头文件 #include <deque> 2.定义 a) deque<int>s1; b) deque<string>s2; c) deque<node>s3; /*node为结构体,可自行定义.*/ 3.常用操作 //a) 构造函数 deque<int> ideq //b)增加函数 ideq