Python中,stack通常指的是一种后进先出(LIFO,Last In First Out)的数据结构,它可以用列表(List)或专用的collections.deque实现,这里,我会介绍如何用列表来实现一个简单的栈,并提供一些基本操作的示例。

stack函数头文件stack函数头文件(图片来源网络,侵删)

创建

使用Python列表作为栈的基础结构非常简单,因为列表提供了append()pop()方法,它们分别对应于栈的pushpop操作。

创建一个空栈
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中的列表由于其灵活性和内置的方法,使得实现栈变得简单而直观。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。