本文目录导读:

我来分享几个Python栈入栈的经典案例,从简单到复杂逐步演示。
基础入栈操作
使用列表实现栈
# 创建一个空栈
stack = []
# 入栈操作 (压入数据)
stack.append(10) # 栈: [10]
stack.append(20) # 栈: [10, 20]
stack.append(30) # 栈: [10, 20, 30]
print("当前栈:", stack) # 输出: [10, 20, 30]
自定义栈类
class Stack:
def __init__(self):
self.items = []
def push(self, item):
"""入栈操作"""
self.items.append(item)
print(f"入栈: {item}")
def pop(self):
"""出栈操作"""
if not self.is_empty():
return self.items.pop()
return None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def peek(self):
"""查看栈顶元素"""
if not self.is_empty():
return self.items[-1]
return None
# 使用示例
stack = Stack()
stack.push("A") # 入栈: A
stack.push("B") # 入栈: B
stack.push("C") # 入栈: C
print(f"栈的大小: {stack.size()}") # 输出: 3
print(f"栈顶元素: {stack.peek()}") # 输出: C
批量入栈
def batch_push(stack, items):
"""批量将多个元素入栈"""
for item in items:
stack.append(item)
return stack
# 示例
stack = []
batch_push(stack, [1, 2, 3, 4, 5])
print("批量入栈后:", stack) # 输出: [1, 2, 3, 4, 5]
条件入栈(带验证)
def conditional_push(stack, item, max_size=5):
"""
条件入栈:栈满时不能入栈
"""
if len(stack) >= max_size:
print(f"栈已满,无法入栈 {item}")
return False
stack.append(item)
print(f"成功入栈: {item}")
return True
# 示例
stack = []
for i in range(7): # 尝试入栈7个元素
conditional_push(stack, i * 10)
print("最终栈:", stack) # 只包含前5个元素
实际应用场景案例
1 括号匹配检查
def check_brackets(expression):
"""检查括号是否匹配"""
stack = []
brackets = {'(': ')', '[': ']', '{': '}'}
for char in expression:
if char in brackets.keys(): # 左括号入栈
stack.append(char)
print(f"入栈: {char}")
elif char in brackets.values(): # 右括号检查
if not stack:
return False
left = stack.pop()
if brackets[left] != char:
return False
return len(stack) == 0
# 测试
expression = "{[()]}"
print(f"括号匹配: {check_brackets(expression)}") # True
2 浏览器的前进后退
class BrowserHistory:
def __init__(self):
self.back_stack = [] # 后退栈
self.forward_stack = [] # 前进栈
self.current = None
def visit(self, url):
"""访问新页面"""
if self.current:
self.back_stack.append(self.current)
print(f"将 {self.current} 入栈到后退栈")
self.current = url
self.forward_stack.clear() # 清空前进栈
print(f"访问新页面: {url}")
def go_back(self):
"""后退"""
if self.back_stack:
self.forward_stack.append(self.current)
self.current = self.back_stack.pop()
print(f"后退到: {self.current}")
# 测试
browser = BrowserHistory()
browser.visit("google.com")
browser.visit("python.org") # google.com 入栈到后退栈
browser.visit("github.com") # python.org 入栈到后退栈
browser.go_back() # 后退到 python.org
入栈操作性能对比
import time
def performance_test():
"""测试不同入栈方式的性能"""
# 方法1: 列表append
stack1 = []
start = time.time()
for i in range(100000):
stack1.append(i)
print(f"列表append耗时: {time.time() - start:.4f}秒")
# 方法2: 使用collections.deque
from collections import deque
stack2 = deque() # 双端队列也可以当栈用
start = time.time()
for i in range(100000):
stack2.append(i) # 与列表相似的入栈方式
print(f"deque耗时: {time.time() - start:.4f}秒")
performance_test()
- 入栈方法: 使用
list.append()或deque.append() - 验证检查: 添加栈容量限制、类型检查等
- 实际应用: 括号匹配、函数调用、撤销操作等
- 性能考虑: 普通场景用列表即可,大量操作考虑deque
希望这些案例能帮助你理解Python栈的入栈操作!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播