4.双端队列 定义一个双端队列,进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。编程实现这个数据结构。 时间限制:1000 内存限制:65535 输入 第一行输入一个整数t,代表测试数据的组数。 每组数据的第一行输入一个整数n,表示操作的次数。 接着输入n行,每行对应一个操作,首先输入一个整数type。 当type=1,进队操作,接着输入一个整数x,表示进入队列的元素。 当type=2,出队操作,接着输入一个整数c,c=0代表从队头出队,c=1代表从队尾出队。 n <= 1000 输出 对于每组测试数据,输出执行完所有的操作后队列中剩余的元素,元素之间用空格隔开,按队头到队尾的顺序输出,占一行。如果队列中已经没有任何的元素,输出NULL。 样例输入 2 5 1 2 1 3 1 4 2 0 2 1 6 1 1 1 2 1 3 2 0 2 1 2 0 样例输出 3 NULL
【喵呜刷题小喵解析】本题要求实现一个双端队列,其进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。首先,我们定义一个双端队列类Deque,包含两个方法:push和pop。push方法用于将元素添加到队尾,pop方法用于从队头或队尾弹出元素。在solve函数中,我们首先读取测试数据的组数t,然后对于每组数据,读取操作次数n,并创建一个空的双端队列dq。对于每个操作,我们读取操作类型和元素x。如果操作类型为1,表示进队操作,我们调用dq.push(x)将元素x添加到队尾。如果操作类型为2,表示出队操作,我们调用dq.pop(x)从队头或队尾弹出元素,并将结果打印出来。如果弹出的元素为空,我们打印'NULL'。如果操作类型不是1或2,我们打印'Invalid operation'。最后,如果当前操作是从队尾出队操作,我们打印一个换行符,以区分每组测试数据。这样,我们就实现了双端队列的编程实现,满足题目的要求。