📅  最后修改于: 2023-12-03 14:54:57.118000             🧑  作者: Mango
Stack 是一个基于 LIFO(last in first out) 原则的数据结构。它可以看做是一种限制性线性表,只能在一端进行插入或删除操作。这一端称为栈顶,相对地,另一端称为栈底。Stack 可以通过 array 或者 linked list 实现。
Stack 主要支持以下三个操作:
push(element)
:将元素压入栈顶;pop()
:将栈顶的元素弹出并返回该元素;peek()
:返回栈顶元素,但是不会将其弹出。这些操作都是 O(1) 的复杂度。
Stack 还有一个常用的操作:
isEmpty()
:如果栈是空的,则返回 true。可以使用 array 实现 Stack。数组中的每个元素都有对应的下标。使用数组实现 Stack 时,需要考虑的一个问题是数组的大小。当添加的元素超出数组大小时,需要创建一个新的数组,并将所有数据复制到新的数组中。
class Stack:
def __init__(self):
self.items = []
def push(self, value):
self.items.append(value)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def isEmpty(self):
return len(self.items) == 0
可以使用 linked list 实现 Stack。
class Node:
def __init__(self, value):
self.value = value
self.next = None
class Stack:
def __init__(self):
self.top = None
def push(self, value):
node = Node(value)
node.next = self.top
self.top = node
def pop(self):
if self.isEmpty():
return None
node = self.top
self.top = node.next
node.next = None
return node.value
def peek(self):
if self.isEmpty():
return None
return self.top.value
def isEmpty(self):
return self.top is None
Stack 的一些常见应用:
Stack 是经典数据结构中的一种基本的数据结构。它的特点是 last in first out,可以支持 push、pop、peek 三种基本操作。Stack 可以基于 array 或者 linked list 实现。Stack 还有诸多常见应用,如括号匹配、迷宫问题、逆波兰表达式求值等等。