【问题标题】:Implementing stack using a queue pseudocode使用队列伪代码实现堆栈
【发布时间】:2018-05-30 17:16:46
【问题描述】:

我对以下伪代码感到困惑

■ 使用单个队列实现堆栈。具体来说,写 使用 enqueue 在堆栈上进行推送和弹出操作的伪代码 和队列的出队操作。考虑给定队列类 给你。我们将使用单个队列 q。考虑队列的前面是栈顶

推(x)

s   =   q.size()
q.enqueue(x)
for(int i = 0;  i < s;  i++)
q.enqueue(q.dequeue())

pop()
if  q.isEmpty()
“Exception”
return  q.dequeue()

我意识到堆栈的底部是队列的尾部。所以当我们入队时,它必须在栈底。所以我们必须从堆栈中删除所有内容并将该项目推入,然后将所有内容放回原处。我不明白“for(int i = 0; i

【问题讨论】:

  • 刚刚修复。它使用队列实现堆栈。对不起

标签: java stack queue


【解决方案1】:

分析队列在 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()

【讨论】:

    【解决方案2】:

    假设您已经添加了 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 ─┐
    └───────────────┘
    

    因此,要对 预先存在的 值执行此操作,您需要在 添加新值之前获取队列的大小,然后添加新值,然后移动最后一个值根据需要提前多次,即size 次。

    【讨论】:

    • @andrewwgel 您应该对您认为有用的所有答案进行投票(即单击向上箭头)。您还应该通过单击复选标记来接受最佳答案,以向其他人表明您的问题已得到您满意的回答(当然,假设它已经回答)。 --- 欢迎来到 StackOverflow。 :-)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2014-12-23
      • 2010-10-15
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2014-04-21
      相关资源
      最近更新 更多