在Python中,stack
通常指的是一种后进先出(LIFO,Last In First Out)的数据结构,它可以用列表(List)或专用的collections.deque
实现,这里,我会介绍如何用列表来实现一个简单的栈,并提供一些基本操作的示例。
(图片来源网络,侵删)
创建栈
使用Python列表作为栈的基础结构非常简单,因为列表提供了append()
和pop()
方法,它们分别对应于栈的push
和pop
操作。
创建一个空栈 stack = []
栈的基本操作
push(入栈)
向栈中添加一个新元素,我们使用列表的append()
方法。
stack.append('a') # 'a' 被添加到栈顶 stack.append('b') # 'b' 被添加到栈顶,现在栈顶是 'b', 'a' 在下面
pop(出栈)
从栈中移除并返回顶部元素,我们使用列表的pop()
方法。
top_element = stack.pop() # 移除并返回 'b' print(top_element) # 输出: 'b'
peek(查看栈顶元素)
有时我们只想查看栈顶的元素而不移除它,可以通过索引实现。
top_element = stack[1] # 查看栈顶元素,不移除,现在栈顶是 'a' print(top_element) # 输出: 'a'
is_empty(检查栈是否为空)
要检查栈是否为空,我们可以比较列表的长度。
def is_empty(stack): return len(stack) == 0 print(is_empty(stack)) # 如果栈为空,则输出 True,否则输出 False
size(获取栈的大小)
获取栈的大小就是获取列表的长度。
def size(stack): return len(stack) print(size(stack)) # 输出栈内元素的数量
综合示例
下面是一个简单的例子,展示了如何使用栈来匹配括号。
def is_matching_parentheses(expr): stack = [] mapping = {")": "(", "}": "{", "]": "["} for char in expr: if char in mapping: top_element = stack.pop() if stack else '#' if mapping[char] != top_element: return False else: stack.append(char) return not stack # 如果栈为空,说明所有括号都匹配成功 测试代码 print(is_matching_parentheses("(){}[]")) # 输出 True,因为括号匹配正确 print(is_matching_parentheses("({[]})")) # 输出 True print(is_matching_parentheses("({[)]}")) # 输出 False,因为括号不匹配
在这个例子中,我们使用栈来跟踪每个未匹配的开括号,当我们遇到闭括号时,我们检查它是否与栈顶的开括号匹配,如果在任何时候闭括号与栈顶的开括号不匹配,或者在处理完整个表达式后栈不为空,这意味着括号没有正确匹配。
总结来说,栈是一种非常基础且强大的数据结构,它在算法和程序设计中扮演着重要角色,Python中的列表由于其灵活性和内置的方法,使得实现栈变得简单而直观。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)