使用队列伪代码实现堆栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用队列伪代码实现堆栈相关的知识,希望对你有一定的参考价值。

我对以下伪代码感到困惑

■使用单个队列实现堆栈。具体来说,使用队列的入队和出队操作为堆栈上的推送和弹出操作写入伪代码。考虑给你的队列类。我们将使用单个队列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 <s; i ++)q.enqueue(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 ─┐
└───────────────┘

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

另一答案

堆栈是一种数据结构,其中要插入的最后一个元素是要返回的第一个元素(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()

以上是关于使用队列伪代码实现堆栈的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

# Java 常用代码片段

替换或删除后台堆栈上现有片段的代码不起作用

伪代码

Python实现简单多线程任务队列

代码适用于与单个 html 文件不同的堆栈片段