栈的常见操作
1. Push(压栈)
功能:
Push
操作是向栈中添加元素,将元素放置在栈顶。栈的特点是后进先出(LIFO),所以元素压入时会覆盖在栈的当前顶端。
使用场景:
当我们需要存储临时数据,或者在递归函数调用时保存局部状态,通常会用到 Push
操作。
代码解析:
class Stack:
def __init__(self, capacity):
self.stack = [] # 使用列表作为栈的存储容器
self.capacity = capacity # 设置栈的最大容量
def push(self, element):
# 检查栈是否已满
if len(self.stack) < self.capacity:
self.stack.append(element) # 将元素加入栈顶
print(f"Element {element} pushed to stack.")
else:
print("Stack is full. Cannot push element.") # 如果栈满了,输出提示
self.stack.append(element)
:将元素添加到栈顶(在 Python 中就是将元素加入列表末尾)。- 容量检查:每次执行
push
操作时,首先需要检查栈是否已满,避免超过栈的最大容量。
示例输出:
stack = Stack(5)
stack.push(10) # 输出: Element 10 pushed to stack.
stack.push(20) # 输出: Element 20 pushed to stack.
2. Pop(出栈)
功能:
Pop
操作从栈顶移除元素并返回该元素。出栈时,栈顶元素被删除,栈顶指针指向下一个元素。
使用场景:
在许多算法中,如深度优先搜索(DFS)、括号匹配、历史记录栈等,我们需要不断移除栈顶元素。
代码解析:
def pop(self):
# 如果栈不为空,返回并移除栈顶元素
if len(self.stack) > 0:
return self.stack.pop() # pop() 会移除并返回栈顶元素
else:
print("Stack is empty. Cannot pop element.") # 如果栈为空,输出提示
return None
self.stack.pop()
:调用pop
方法会移除并返回栈顶元素。在 Python 中,pop()
会删除列表的最后一个元素,并返回该元素。- 空栈检查:每次执行
pop
时,必须先检查栈是否为空,避免对空栈执行操作。
示例输出:
stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.pop()) # 输出: 20
print(stack.pop()) # 输出: 10
print(stack.pop()) # 输出: Stack is empty. Cannot pop element.
3. ReadTop(查看栈顶元素)
功能:
ReadTop
操作返回栈顶元素但不将其移除。这通常用于查看栈的当前状态,而不改变栈的结构。
使用场景:
如果我们想检查栈顶元素但不想删除它,可以使用 ReadTop
。例如,在某些算法中需要参考栈顶元素的值,但后续可能还会用到该元素。
代码解析:
def read_top(self):
# 如果栈不为空,返回栈顶元素但不移除它
if len(self.stack) > 0:
return self.stack[-1] # 返回列表的最后一个元素
else:
print("Stack is empty. No top element.")
return None
self.stack[-1]
:在 Python 中,负索引-1
指向列表的最后一个元素,即栈顶元素。- 空栈检查:如果栈为空,返回
None
并提示栈为空。
示例输出:
stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.read_top()) # 输出: 20
4. Peek(移除并返回栈顶元素,同时更新栈顶指针)
功能:
Peek
操作既会移除栈顶元素,又会返回该元素。在执行 Peek
后,栈顶指针会向下移动,指向下一个元素。
使用场景:
Peek
操作通常在某些特定场合中使用,比如在解析表达式、匹配括号时需要实时移除栈顶元素。
代码解析:
def peek(self):
# 如果栈不为空,移除并返回栈顶元素
if len(self.stack) > 0:
return self.stack.pop() # 调用 pop() 即可移除并返回栈顶元素
else:
print("Stack is empty. Cannot peek.")
return None
- 这里的
peek
和pop
很相似,不同的是它在返回栈顶元素后会直接更新栈的结构,即移除该元素。
示例输出:
stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.peek()) # 输出: 20,并移除它
5. IsEmpty(栈是否为空)
功能:
IsEmpty
操作用于检查栈是否为空。如果栈内没有任何元素,返回 True
,否则返回 False
。
使用场景:
在执行 pop
或 peek
操作前,通常需要先检查栈是否为空,以防止出现空栈错误。
代码解析:
def is_empty(self):
return len(self.stack) == 0 # 如果栈中元素个数为0,说明栈为空
len(self.stack) == 0
:通过检查栈的长度是否为 0 来判断栈是否为空。
示例输出:
stack = Stack(5)
print(stack.is_empty()) # 输出: True
stack.push(10)
print(stack.is_empty()) # 输出: False
6. IsFull(栈是否已满)
功能:
IsFull
操作用于检查栈是否已满。如果栈已达到预设容量,返回 True
,否则返回 False
。
使用场景:
IsFull
操作通常在执行 Push
操作前调用,确保不会向已经满的栈中添加新元素。
代码解析:
def is_full(self):
return len(self.stack) == self.capacity # 栈满时,长度等于容量
len(self.stack) == self.capacity
:通过比较栈的长度与设定的容量来判断栈是否已满。
示例输出:
stack = Stack(3)
print(stack.is_full()) # 输出: False
stack.push(10)
stack.push(20)
stack.push(30)
print(stack.is_full()) # 输出: True
标签:元素,Python,self,常见,栈顶,pop,移除,操作,stack
From: https://blog.csdn.net/2302_79730293/article/details/144705966