首页 > 编程知识 正文

数据结构之栈python版

时间:2023-11-19 01:14:26 阅读:298337 作者:UAFW

栈是一种经典的数据结构,它具有后进先出(Last In First Out, LIFO)的特性。在Python中,我们可以使用列表(List)来实现栈的功能。本文将从多个方面对数据结构之栈python版进行详细阐述。

一、栈的基本介绍

栈最基本的操作包括入栈(Push)和出栈(Pop)。入栈将元素添加到栈顶,出栈将栈顶元素删除并返回。通过这两个操作,我们可以实现栈的基本功能。

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

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

    def pop(self):
        if self.is_empty():
            return None
        return self.stack.pop()

上述代码定义了一个Stack类,其中使用一个列表作为栈的存储结构。push方法用于将元素添加到栈顶,pop方法用于删除并返回栈顶元素。is_empty方法可以判断栈是否为空。

二、栈的应用举例

栈在实际应用中有着广泛的用途,下面以两个常见的应用举例进行介绍。

1. 括号匹配

栈可以用于检测表达式中括号的匹配情况。我们可以通过遍历字符串,将左括号入栈,遇到右括号时,将栈顶的左括号出栈,判断是否匹配。

def is_valid_parentheses(s):
    stack = Stack()
    for ch in s:
        if ch == '(' or ch == '[' or ch == '{':
            stack.push(ch)
        elif ch == ')' or ch == ']' or ch == '}':
            if stack.is_empty():
                return False
            top = stack.pop()
            if (ch == ')' and top != '(') or (ch == ']' and top != '[') or (ch == '}' and top != '{'):
                return False
                
    return stack.is_empty()

以上代码实现了一个函数is_valid_parentheses,判断一个字符串中的括号是否匹配。该函数通过遍历字符串,将左括号入栈,遇到右括号时,将栈顶的左括号出栈,判断是否匹配。

2. 浏览器的前进和后退

在浏览器中,我们可以通过前进和后退按钮来访问已点击的网页。这个功能可以借助栈来实现。当我们点击一个新的网页时,将该网页入栈;当我们点击后退按钮时,将当前网页出栈,即可回退到上一个网页。

class Browser:
    def __init__(self):
        self.history = Stack()
        self.forward = Stack()

    def visit(self, website):
        self.history.push(website)
        self.forward = Stack()  # 清空前进栈

    def go_back(self):
        if not self.history.is_empty():
            website = self.history.pop()
            self.forward.push(website)
            return website
        else:
            return None

    def go_forward(self):
        if not self.forward.is_empty():
            website = self.forward.pop()
            self.history.push(website)
            return website
        else:
            return None

以上代码实现了一个Browser类,其中使用两个栈history和forward分别表示浏览器的访问历史和后续访问。visit方法用于访问一个新的网页,go_back方法用于后退,go_forward方法用于前进。

三、栈的时间复杂度分析

栈的入栈和出栈操作时间复杂度都为O(1),即常数时间。因此,栈的操作非常高效。

四、总结

本文介绍了使用Python实现栈数据结构的基本操作和应用举例,并对栈的时间复杂度进行了分析。栈作为一种重要的数据结构,在算法和实际应用中都有着广泛的用途。熟练掌握栈的使用,对于编程开发工程师来说是非常重要的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。