Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解由两个队列实现的堆栈的Pop和Push操作逻辑_Java_Queue - Fatal编程技术网

Java 理解由两个队列实现的堆栈的Pop和Push操作逻辑

Java 理解由两个队列实现的堆栈的Pop和Push操作逻辑,java,queue,Java,Queue,我试图从Mahmood Akhtar的解释中理解以下方法。请在下面查找代码段: public void push(int data) { if (q1.peek() == null) { q1.add(data); } else { for (int i = q1.size(); i > 0; i--) { q2.add(q1.remove()); }

我试图从Mahmood Akhtar的解释中理解以下方法。请在下面查找代码段:

public void push(int data) {

        if (q1.peek() == null) {
            q1.add(data);
        } else {
            for (int i = q1.size(); i > 0; i--) {
                q2.add(q1.remove());
            }
            q1.add(data);
            for (int j = q2.size(); j > 0; j--) {
                q1.add(q2.remove());
            }

        }
    }
以下是我的理解:

步骤1:第一条if语句检查队列q1是否为null,如果为null,则添加数据

第2步:否则,由于q1已满,我们将不得不将数据从q1移动到q2。因此,else语句中的第一个for循环基本上从q1的大小开始,一直运行到遇到最后一个元素。所有元素都移动到q2中。将新数据添加到q1中

第3步:第2季度重复与第2步相同的过程

如果我的解释正确与否,请纠正我

第二个问题:

在pop方法中:

public int pop() {
        if (q1.peek() == null) {
            System.out.println("The stack is empty, nothing to return");
            int i = 0;
            return i;
        } else {
            int pop = q1.remove();
            return pop;
        }
    }
他们为什么要从队列q1中删除第一个元素?因为队列q1中的第一个元素将符合FIFO原则,对于堆栈,它应该是最后一个元素

我认为他应该做的是,他应该将所有元素从q1转移到q2,直到最后一个元素离开,然后从队列中移除该元素。如果我错了,请纠正我

谢谢

步骤2:否则,由于q1已满

这种假设是错误的。队列未满。它只检查是否包含至少一个元素。如果包含,则首先将它们存储到单独的队列中,存储元素,然后存储回所有其他元素。因此,它以相反的顺序存储元素

他们为什么要从队列q1中删除第一个元素

因为元素是按相反的顺序存储的。这就是push方法的全部逻辑

他应该将所有元素从q1转移到q2,直到最后一个元素离开,然后从队列中删除该元素

他只是在这样做,只是您希望在
pop()
方法中发生这种情况,但代码是在
push()
方法中进行的

我认为他应该做的是,他应该将所有元素从q1转移到q2,直到最后一个元素离开,然后从队列中移除该元素。如果我错了,请纠正我


而且在pop操作结束时,q1和q2的角色被交换,因此所述的解决方案将使算法在弹出项时最有效

@DanielImms您有关于使用队列实现堆栈的文章吗?我在链接中看到了使用堆栈的队列实现。另外,如果你能对我的问题提出一些看法,那就太好了。谢谢