栈的应用(后进先出 LIFO)--括号匹配问题

应用,后进先出,lifo,括号,匹配,问题 · 浏览次数 : 2

小编点评

**博客地址:** https://www.cnblogs.com/zylyehuo/# -*- coding: utf-8 -*-class Stack: def __init__(self): self.stack = [] def push(self, element): self.stack.append(element) def pop(self): return self.stack.pop() def get_top(self): if len(self.stack) > 0: return self.stack[-1] else: return None def is_empty(self): return len(self.stack) == 0def brace_match(s): match = {'}': '{', ']': \"[\", ')': '('} stack = Stack() for ch in s: if ch in {'(', '[', '{'}: stack.push(ch) else: # ch in {'}',']',')'} if stack.is_empty(): return False elif stack.get_top() == match[ch]: stack.pop() else: # stack.get_top() != match[ch] return False if stack.is_empty(): return True else: return Falseprint(brace_match('[{()}(){()}[]({}){}]'))print(brace_match('[]}'))。 **总结:** 该博客文章介绍了使用 Python 设计的栈数据结构。栈是一种先进的数据结构,它允许您在添加元素之前检查元素是否合法,并确保您始终从堆栈中取出元素时它们是合法的。 **主要方法:** * `__init__` 方法初始化栈。 * `push` 方法添加元素到栈。 * `pop` 方法从栈中取出元素。 * `get_top` 方法返回栈顶元素。 * `is_empty` 方法检查栈是否为空。 * `brace_match` 方法检查字符串中的元素是否符合括号匹配规则。 **示例:** ```python print(brace_match('[{()}(){()}[]({}){}]')) print(brace_match('[]}')) ``` **输出:** ``` True True ``` **注意:** 该博客文章仅介绍了栈的基本操作。有关更高级用法的细节,您可以参考其他资源。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

class Stack:

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

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

    def pop(self):
        return self.stack.pop()

    def get_top(self):
        if len(self.stack) > 0:
            return self.stack[-1]
        else:
            return None

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


def brace_match(s):
    match = {'}': '{', ']': "[", ')': '('}
    stack = Stack()
    for ch in s:
        if ch in {'(', '[', '{'}:
            stack.push(ch)
        else:  # ch in {'}',']',')'}
            if stack.is_empty():
                return False
            elif stack.get_top() == match[ch]:
                stack.pop()
            else:  # stack.get_top() != match[ch]
                return False
    if stack.is_empty():
        return True
    else:
        return False


print(brace_match('[{()}(){()}[]({}){}]'))
print(brace_match('[]}'))

与栈的应用(后进先出 LIFO)--括号匹配问题相似的内容:

栈的应用(后进先出 LIFO)--括号匹配问题

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- class Stack: def __init__(self): self.stack = [] def push(self, element): self.stack.ap

5.10 汇编语言:汇编过程与结构

过程的实现离不开堆栈的应用,堆栈是一种后进先出`(LIFO)`的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。栈是由`CPU`管理的线性内存数组,它使用两个寄存器`(SS和ESP)`来保存栈的状态,SS寄存器存放段选择符,而ESP寄存器的值通常是指向特定位置的一个32位偏移值,我们很少需要直接操作ESP寄

ROMA Connect: 5大联接能力+4大集成能力,推进企业数字化转型

摘要:ROMA Connect是一个全栈式的应用与数据集成平台,源自华为数字化转型集成实践,聚焦应用和数据连接,适配多种企业常见的使用场景。 本文分享自华为云社区《数据融合集成平台ROMA Connect,推进企业数字化转型》,作者:华为云PaaS服务小智 。 前言 高新科技突飞猛进的今天,企业不断

2022年了你还不了解加解密吗

前言 加密解密是前后端开发经常需要使用到的技术,应用场景包括不限于用户鉴权、数据传输等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标。所以了解加解密,以及常用的加解密函数库,可以根据不同的业务场景,选择适合当下业务场景的加解密函数库。 安全性威胁 这

由 Base64 展开的知识探讨

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。。 本文作者:霜序(掘金) 前言 在我们的业务应用中越来越多的应用到编码内容,例如在 API 中,给到后端的 SQL 都是通过 Base64 加密的数据等等。 能够发现我

4.8 x64dbg 学会扫描应用堆栈

LyScript 插件中提供了针对堆栈的操作函数,对于堆的开辟与释放通常可使用`create_alloc()`及`delete_alloc()`在之前的文章中我们已经使用了堆创建函数,本章我们将重点学习针对栈的操作函数,栈操作函数有三种,其中`push_stack`用于入栈,`pop_stack`用于出栈,而最有用的还属`peek_stack`函数,该函数可用于检查指定堆栈位置处的内存参数,利用这

7.4 C/C++ 实现链表栈

相对于顺序栈,链表栈的内存使用更加灵活,因为链表栈的内存空间是通过动态分配获得的,它不需要在创建时确定其大小,而是根据需要逐个分配节点。当需要压入一个新的元素时,只需要分配一个新的节点,并将其插入到链表的头部;当需要弹出栈顶元素时,只需要删除链表头部的节点,并释放其所占用的内存空间即可。由于链表栈的空间利用率更高,因此在实际应用中,链表栈通常比顺序栈更受欢迎。在实现上,链表栈通过使用`malloc

[转帖]A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

https://www.modb.pro/db/610990 对于开发及运维人员来讲,火焰图是一个经典的定位性能问题的方法。利用火焰图可以可视化系统资源(cpu占用、内存占用、调度、IO等)的占用情况,从而帮助技术人员快速定位资源异常使用的代码级根因,或者观察潜在性能劣化趋势,进而优化系统和应用的性

qiankun微前端实践

为什么要使用微前端 微前端架构具备以下几个核心价值: 技术栈无关 主框架不限制接入应用的技术栈,微应用具备完全自主权 独立开发、独立部署 微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新 增量升级在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前

[转帖]docker 搭建 redis 伪分布式集群

https://www.jianshu.com/p/453a2d70a5de 建议阅读方式 可前往语雀阅读,体验更好:docker 搭建 redis 伪分布式集群 背景介绍 该实验主要来源于《Docker 容器与容器云 第2版》一书的 2.3 节:“搭建你的第一个 Docker 应用栈”中的一小步,