Java 使用队列伪代码实现堆栈

Java 使用队列伪代码实现堆栈,java,stack,queue,Java,Stack,Queue,我对以下伪代码感到困惑 ■ 使用单个队列实现堆栈。具体来说,写 使用排队在堆栈上执行推送和弹出操作的伪代码 以及队列的出列操作。考虑给定队列类 谢谢你。我们将使用单个队列q。考虑队列的前面是堆栈的顶部< /p> 普什 我意识到堆栈的底部是队列的后面。因此,当我们排队时,它必须在堆栈的底部。因此,我们必须从堆栈中移除所有内容并将其推入,然后将所有内容放回。我不理解forint I=0;i

我对以下伪代码感到困惑

■ 使用单个队列实现堆栈。具体来说,写 使用排队在堆栈上执行推送和弹出操作的伪代码 以及队列的出列操作。考虑给定队列类 谢谢你。我们将使用单个队列q。考虑队列的前面是堆栈的顶部< /p> 普什

我意识到堆栈的底部是队列的后面。因此,当我们排队时,它必须在堆栈的底部。因此,我们必须从堆栈中移除所有内容并将其推入,然后将所有内容放回。我不理解forint I=0;iq、 我想这就是我所说的,但是有人能带我走过吗?谢谢大家!

堆栈是一种数据结构,其中插入的最后一个元素是LIFO返回的第一个元素。简单队列FIFO是一种按元素插入顺序返回元素的结构


您询问的循环正在对队列进行重新排序,因此刚刚插入的元素现在是第一个返回的元素。更准确地说,它将对所有其他元素进行出列和排队,这使得刚刚插入的元素成为第一个要返回的元素。所有其他元素都在插入元素之后排队,这意味着插入的元素现在是第一个退出队列的元素。

分析for循环中队列的变化。代码只是添加新元素并重写其余元素

s   =   q.size() .            // Initial queue: (in) -> A -> B -> C -> (out)
q.enqueue(x)                  //           (in) -> D -> A -> B -> C -> (out)
for(int i = 0;  i < s;  i++)
    q.enqueue(q.dequeue())    // i == 0: (in) -> C -> D -> A -> B -> (out)
                              // i == 1: (in) -> B -> C -> D -> A -> (out)
                              // i == 2: (in) -> A -> B -> C -> D -> (out)
pop()
if  q.isEmpty()
    “Exception”
return  q.dequeue()

假设您已经添加了3个值:

6  7  8
对于队列,您只能在左侧添加,而只能在右侧执行

对于堆栈,您希望在右侧添加,并在右侧执行,即目标是在右侧添加下一个值9,如下所示:

6  7  8  9
但是,对于队列,您只能在左侧添加:

9  6  7  8
因此,您要做的是使用有效的队列操作,从右向左循环先前存在的值6 7 8,一次循环一个值:

┌─> 8  9  6  7 ─┐
└───────────────┘

┌─> 7  8  9  6 ─┐
└───────────────┘

┌─> 6  7  8  9 ─┐
└───────────────┘

因此,要对预先存在的值执行此操作,您需要在添加新值之前获取队列的大小,然后添加新值,并根据需要将最后一个值向前移动任意次数,即大小时间。

刚刚固定。它使用队列实现堆栈。Sorry@andrewwgel你应该向上投票,即在你认为有用的所有答案上单击向上箭头。您还应通过单击复选标记接受最佳答案,以向其他人显示您的问题已得到满意的回答,当然,假设您的问题得到了满意的回答。-欢迎来到StackOverflow:-
┌─> 8  9  6  7 ─┐
└───────────────┘

┌─> 7  8  9  6 ─┐
└───────────────┘

┌─> 6  7  8  9 ─┐
└───────────────┘