浅谈堆栈数据结构
程序员文章站
2022-07-14 08:50:40
...
(翻译文)
在本教程中,您将学习栈数据结构及其在Python中的实现。
堆栈是编程中有用的数据结构。就像一堆盘子彼此叠放。
想一想用这样一堆盘子可以做的事情:
- 在上面放一个新盘子
- 拿开顶部的盘子
如果要将盘子放在底部,则必须先卸下顶部的所有盘子。这种安排称为“ 后进先出” ,放置的最后一个项是第一个要出去的项。
堆栈的LIFO原理
用编程的术语来说,将一个项放在堆栈的顶部称为“push”,而将一个项目删除则称为“pop”。
在上图中,尽管项2保留在最后,但它会首先被删除–因此它遵循后进先出(LIFO)原则。
我们可以用任何编程语言(例如C,C ++,Java,Python或C#)实现堆栈,但是规范几乎是一样的。
堆栈的基本操作
堆栈是一个对象,或更具体地说,是一个允许执行以下操作的抽象数据结构(ADT):
- Push:将元素添加到堆栈顶部
- Pop:从堆栈顶部删除元素
- IsEmpty:检查堆栈是否为空
- IsFull:检查堆栈是否已满
- Peek:获取顶部元素的值而不删除它
堆栈数据结构的工作过程
具体操作如下:
- TOP指针用于跟踪堆栈中的顶部元素。
- 初始化堆栈时,我们将其设置为-1,以便我们可以通过比较 TOP == -1 来检查堆栈是否为空。
- 添加元素时,我们增加了 TOP 值并将新元素放置在 TOP 所指向的位置。
- 弹出元素时,我们返回 TOP 指向的元素并降低 TOP 值。
- 推入之前,我们检查堆栈是否已满。
- 弹出之前,我们检查堆栈是否为空。
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