单点时限: 2.0 sec
内存限制: 512 MB
请你实现一个队列,同时你有两个队列的实例对象$a,b$,我们将为实例$a,b$完成如下操作:
$pop$ $a/b$ :弹出$ a/b $队首元素
$push$ $ a/b$ $x$ :在队列$ a/b $中入队 $x$
$front$ $a/b$ :返回$ a/b $队首元素
$size$ $a/b$ :返回$ a/b $当前队列内元素个数(若队列为空则返回0)
$clear$ $a/b $ :清空$ a/b $队列
$empty$ $a/b$ :判断$ a/b $是否为空,YES
表示空,NO
表示非空
$operator=$ $a/b $:将队列$ a/b $赋值给另一个队列,即将$ a/b $队列中元素复制一份给另一个队列(这里的复制特定指深拷贝,参见样例解释)
$ swap $:交换两个队列。
注意,如果出现任何非法操作,则输出ERROR
,并 跳过 该操作。
除了operator=
和clear
操作外,其他操作都要求在$O(1)$时间内完成。
利用链表数据结构实现Linked Queue
,自己定义链表节点。
第一行一个整数 $Q$ ,表示接下来的操作个数;
接下来的 $Q$ 行,每行1-2个字符串,表示操作(如果操作为 $push$ ,则还会再输入一个整数 $x$)。
对于 $front$ 、 $size$ 、 $empty$ 命令,输出对应的答案。
遇到任意非法的操作则输出ERROR
,并且跳过该操作。
22 pop a push a 1 push a 2 push b 3 front a operator= a front a front b push a 4 front a pop a front a front b pop a front a swap front a front b pop b pop b empty b empty a
ERROR 1 1 1 1 2 1 4 1 4 ERROR YES NO
样例解释:
在经过operator=
操作时,将$a$队列复制给$b$队列,这时候$a$和$b$中队列元素都是$1$ $2$,当$a$队列插入$4$之后,$a$队列中的元素变成$1$ $2$ $4$,但是$b$队列中的元素仍然是$1$ $2$。