欢迎访问宙启技术站
智能推送

Python实现栈数据结构

发布时间:2023-12-04 08:57:41

栈是一种线性数据结构,它基于LIFO(Last-In-First-Out)原则,即最后进入的元素首先被访问。栈可以通过使用数组或链表来实现,但在本文中,我们将使用数组来实现栈数据结构。

Python提供了一个内置的list数据类型,我们可以使用该类型来创建一个栈。下面是一个简单的栈类的实现:

class Stack:
    def __init__(self):
        self.items = []

    def is_empty(self):
        return len(self.items) == 0

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()

    def peek(self):
        if not self.is_empty():
            return self.items[-1]

    def size(self):
        return len(self.items)

上面的代码中,我们定义了一个Stack类,它有以下几个方法:

- __init__: 初始化一个空的栈,使用一个空的list来保存栈的元素。

- is_empty: 检查栈是否为空,如果栈为空则返回True,否则返回False

- push: 向栈中添加一个新的元素。

- pop: 弹出栈顶的元素,并返回该元素。

- peek: 返回栈顶的元素,不对栈做任何修改。

- size: 返回栈中元素的个数。

下面是一个使用栈来检查字符串中的括号是否匹配的例子:

def is_brackets_balanced(str):
    stack = Stack()

    for char in str:
        if char in '([{':
            stack.push(char)
        elif char in ')]}':
            if stack.is_empty():
                return False
            elif char == ')' and stack.peek() != '(':
                return False
            elif char == ']' and stack.peek() != '[':
                return False
            elif char == '}' and stack.peek() != '{':
                return False
            else:
                stack.pop()

    return stack.is_empty()

# 测试
print(is_brackets_balanced('()[]{}'))  # True
print(is_brackets_balanced('([)]'))    # False
print(is_brackets_balanced('{{[]}}'))  # True
print(is_brackets_balanced('({}]'))    # False

在上面的例子中,我们使用栈来检查字符串中的括号是否匹配。遍历字符串的每个字符,如果遇到左括号('(', '[', '{'),则将其推入栈中;如果遇到右括号(')', ']', '}'),则弹出栈顶的元素,并检查是否与当前遍历的字符匹配。如果栈为空,或者弹出的元素与当前字符不匹配,则括号不匹配。

总结:

栈是一种重要的数据结构,我们可以使用栈来解决许多问题,包括表达式求值、括号匹配、迷宫求解等。通过使用Python中的list来实现一个栈类,我们可以很方便地使用栈来解决这些问题。