数据结构中的 LIFO 方法

2025年3月17日 | 阅读16分钟

LIFO代表**后进先出**,在此原则下我们将数据元素输入到数据结构中。这里,我们将弹出最新添加的数据元素。这意味着最后一个进入的元素将是第一个被弹出的。

例如:

堆叠在一起的书籍数量

另一个最佳的现实生活示例是**汉诺塔。**这是一个有趣的游戏,完全基于后进先出的原则。

  • 基于LIFO原则的数据结构是栈。
  • 在栈数据结构中,我们将执行两个主要操作:第一个是**压入(push)**,另一个是**弹出(pop)**。
  • 最近被压入栈的数据元素将首先被弹出;反之亦然,最初被压入栈的数据元素将最后被弹出,直到我们弹出其之前存在的所有元素。
  • 栈只有一个端点,或者我们可以说它只有一个开口。
  • 大多数程序都基于LIFO的概念。
  • 对于各种表达式的求值,如后缀转中缀、中缀转前缀以及前缀转后缀,栈都扮演着非常重要的角色。
  • 它的主要应用是**递归**的实现。递归用于更有效地解决问题。
  • 此外,LIFO原则还用于堆中,以及在程序执行时填充程序的激活记录。
  • 为了实现下推自动机以检查字符串是否被机器接受,使用了栈数据结构。
  • 它主要基于LIFO原则,在此原则下,我们根据需要将输入字符串逐一压入栈中,并以同样的方式弹出相同数量的字符串,以便我们能够轻松计算给定字符串中字母的数量,并识别它是否属于所提及的上下文无关文法。

基于LIFO原则的数据结构是**栈**。我们主要对其执行两个操作:**压入(push)**和**弹出(pop)**。压入操作用于将数据元素压入栈中,弹出操作用于从栈中弹出数据元素。

在栈数据结构中,我们有一个名为top的指针,它指向栈顶的值。最初,当栈为空时,它指向空指针;因此这种情况被称为**下溢条件。**在栈中,我们给定栈的容量,比如**n**。我们需要将数据值逐一插入栈中,直到栈顶达到栈的容量。如果达到容量,则这种情况被称为**上溢。**

让我们借助一个例子来理解LIFO的概念,

如果我们有一个容量为10个盘子的容器,我们需要将盘子逐一放入其中,那么我们可以使用后进先出原则来完成,

盘子编号从1到10,我们被要求按递增顺序将所有盘子推入容器中

LIFO Approach in data structure
  • 最初,容器是空的;因此我们称之为下溢条件。
  • 我们将盘子1放入容器中。
  • 容器的顶部将指向盘子1;之后,我们将盘子2压入容器中。
  • 然后,现在顶部指针将指向盘子2;类似地,我们将所有盘子压入容器中。
  • 最后,当容器的顶部指向盘子10时,这将表明上溢条件;因此在我们弹出一个盘子之前,我们不能再放入其他盘子。
  • 如果我们要从容器中取出盘子5,我们必须从容器中取出盘子,直到我们取出盘子5。
  • 首先,我们将弹出最近推入的盘子,即盘子10,从容器中。
  • 之后,我们将从容器中弹出盘子9。
  • 然后是8,然后是7,然后是6,最后容器的顶部将指向盘子5。
  • 我们将从容器中弹出盘子5。

从上面的例子中,我们已经了解了后进先出原则的工作原理。

现在,让我们在程序中用栈实现LIFO原则。

在程序中使用栈实现LIFO原则

为了使用栈实现LIFO方法,我们提供了一个具有最大容量限制的栈。对于栈,我们有一个名为top的指针,它被初始化为-1,表示栈的下溢条件,这意味着我们无法从栈中弹出数据元素,因为它是空状态,但我们可以将数据元素输入其中。我们将数据元素逐一输入栈中,直到达到栈的容量限制;一旦达到栈的限制,即top == capacity - 1,我们就不能再输入更多数据元素到栈中,这意味着栈的溢出条件。要向栈中输入更多数据元素,我们需要通过应用弹出操作从栈中移除数据元素。

通过这种方式,我们将使用栈实现LIFO原则。

在C编程语言中使用栈实现LIFO方法

上述程序的输出

LIFO Approach in data structure

在C++编程语言中使用栈实现LIFO方法

上述程序的输出

LIFO Approach in data structure

在JAVA编程语言中使用栈实现LIFO方法

上述程序的输出

LIFO Approach in data structure

在Python编程语言中使用栈实现LIFO方法

上述程序的输出

LIFO Approach in data structure

在C#编程语言中使用栈实现LIFO方法

上述程序的输出

Pop:
4
3
2
1
0
Element on stack top: 4
Element is found at position 3
Element not found    

在JavaScript编程语言中使用栈实现LIFO方法

上述程序的输出

Pop:
4
3
2
1
0
Element on stack top: 4
Element is found at position 3
Element not found   

在C编程语言中使用结构实现栈的LIFO方法

上述程序的输出

LIFO Approach in data structure

在C++编程语言中使用结构实现栈的LIFO方法

上述程序的输出

LIFO Approach in data structure