简明易懂的算法文章-浅谈堆栈数据结构

(翻译文)
    在本教程中,您将学习栈数据结构及其在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值