欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅谈堆栈数据结构

程序员文章站 2022-07-14 08:50:40
...

(翻译文)
    在本教程中,您将学习栈数据结构及其在Python中的实现。
    堆栈是编程中有用的数据结构。就像一堆盘子彼此叠放。
浅谈堆栈数据结构
    想一想用这样一堆盘子可以做的事情:

  • 在上面放一个新盘子
  • 拿开顶部的盘子

    如果要将盘子放在底部,则必须先卸下顶部的所有盘子。这种安排称为“ 后进先出” ,放置的最后一个项是第一个要出去的项。

堆栈的LIFO原理

    用编程的术语来说,将一个项放在堆栈的顶部称为“push”,而将一个项目删除则称为“pop”。
浅谈堆栈数据结构
    在上图中,尽管项2保留在最后,但它会首先被删除–因此它遵循后进先出(LIFO)原则。
    我们可以用任何编程语言(例如C,C ++,Java,Python或C#)实现堆栈,但是规范几乎是一样的。

堆栈的基本操作

    堆栈是一个对象,或更具体地说,是一个允许执行以下操作的抽象数据结构(ADT):

  • Push:将元素添加到堆栈顶部
  • Pop:从堆栈顶部删除元素
  • IsEmpty:检查堆栈是否为空
  • IsFull:检查堆栈是否已满
  • Peek:获取顶部元素的值而不删除它
堆栈数据结构的工作过程

    具体操作如下:

  1. TOP指针用于跟踪堆栈中的顶部元素。
  2. 初始化堆栈时,我们将其设置为-1,以便我们可以通过比较 TOP == -1 来检查堆栈是否为空。
  3. 添加元素时,我们增加了 TOP 值并将新元素放置在 TOP 所指向的位置。
  4. 弹出元素时,我们返回 TOP 指向的元素并降低 TOP 值。
  5. 推入之前,我们检查堆栈是否已满。
  6. 弹出之前,我们检查堆栈是否为空。

浅谈堆栈数据结构

Python中的堆栈实现

    最常见的堆栈实现是使用数组,但是也可以使用列表来实现。

# Stack implementation in python


# Creating a stack
def create_stack():
    stack = []
    return stack


# Creating an empty stack
def check_empty(stack):
    return len(stack) == 0


# Adding items into the stack
def push(stack, item):
    stack.append(item)
    print("pushed item: " + item)


# Removing an element from the stack
def pop(stack):
    if (check_empty(stack)):
        return "stack is empty"

    return stack.pop()


stack = create_stack()
push(stack, str(1))
push(stack, str(2))
push(stack, str(3))
push(stack, str(4))
print("popped item: " + pop(stack))
print("stack after popping an element: " + str(stack))
堆栈时间复杂度

    对于基于数组的堆栈实现,push和pop操作需要固定的时间,即O(1),因为在这两种情况下都只有指针的移动。

堆栈数据结构的应用

    尽管堆栈是一个易于实现的简单数据结构,但它非常强大。堆栈最常见的用途是:

  • 反转单词 -将所有字母叠放并弹出。由于堆栈的LIFO顺序,您将获得相反顺序的字母。
  • 在编译器中 -编译器使用堆栈来计算表达式的值,例如2 + 4 / 5 * (7 - 9)将表达式转换为前缀或后缀形式。
  • 在浏览器中 - 浏览器中的 “后退”按钮会将您以前访问过的所有URL保存在堆栈中。每次您访问新页面时,它都会被添加到堆栈顶部。当您按下“后退”按钮时,当前URL从堆栈中删除,并访问前一个URL。
参考文档

https://www.programiz.com/dsa/stack