C++ 中的栈反转

2025年5月10日 | 阅读 4 分钟

堆栈是 C++ 中的一种数据结构。它遵循后进先出原则,也称为 LIFO 原则。在这种数据结构中,最后添加的元素首先被移除。在本文中,我们将通过几个示例讨论如何在 C++ 中反转堆栈

堆栈处理方法

堆栈处理中经常使用的一些方法是

  • Push:此方法用于将元素添加到堆栈顶部
  • Pop:此方法用于移除堆栈中的顶部元素
  • Top:此方法将返回堆栈中最近添加的元素。最近添加的元素将是堆栈的顶部元素。
  • Empty:此方法用于检查堆栈是否为空
  • Size:此方法将返回堆栈中元素的总数

示例

  • 假设有一个名为 myStack 的堆栈,它最初是空的。
  • 之后,添加了两个元素 10 和 20,所以这里顶部元素是 20
  • 接下来,另一个元素被压入堆栈,因此顶部变为 30。
  • 现在,我们使用另一个辅助堆栈,名为auxStack来反转堆栈。

因此,首先,从myStack中弹出顶部元素,然后将该元素压入auxStack。同样,弹出 myStack 的所有元素并将它们压入 auxStack。最后,auxStack 将是 myStack 的反转堆栈创建

myStack

30 ← 顶部

20

10

堆栈反转

myStack 为空

auxStack

10 ← 顶部

20

30

示例 1

让我们举一个例子来说明如何在 C++ 中使用一些临时堆栈来反转堆栈。

输出

Reverse of Stack in C++

说明

在上述堆栈中,最初声明了一个名为myStack堆栈 i。之后,三个元素被静态添加到堆栈中。目前,堆栈的顶部是 30。接下来,此 myStack 被传递给reverseStack函数。此函数主要用于反转堆栈。在此函数中,使用了另一个名为 aux 的堆栈。之后,使用 while 循环同时弹出 myStack 的所有元素并将其压入 aux 堆栈。最后,在 while 循环终止后,将 aux 分配给先前的原始堆栈。

示例 2

让我们举一个例子来说明如何在 C++ 中使用递归来反转堆栈。

输出

Reverse of Stack in C++

说明

上面的 C++ 程序演示了使用递归反转堆栈。insertBottomreverseStack是此程序中使用的两个函数。insertBottom函数用于通过递归移除和恢复元素来将元素插入堆栈底部。reverseStack 函数在 main 函数中被调用,然后 insertBottom 函数在 reverseStack 函数中被调用。此函数递归调用。最后,反转后的堆栈返回给 main 函数。

示例 3

在 C++ 中使用 vector 而不是辅助堆栈来反转堆栈。

输出

Reverse of Stack in C++

说明

上面的程序演示了如何反转堆栈。这里,声明了一个名为myStack的堆栈。一些元素被添加到 myStack 中,然后调用带有 myStack 的 reverseStack 函数。在reverseStack函数中,使用了临时 vector。之后,while 循环从堆栈中弹出每个元素并将它们添加到 vector 中。如果堆栈为空,则 while 循环终止。接下来,使用 for 循环从末尾迭代 vector。之后,将元素添加到堆栈中,这使得堆栈反转。最后,使用 while 循环作为 main 函数来打印反转堆栈中的元素。