| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 数据结构学习笔记(python)——栈 -> 正文阅读 |
|
[Python知识库]数据结构学习笔记(python)——栈 |
一.定义:有序集合,添加操作和移除操作发生在同一端,排序原则为LIFO(后进先出) 二.栈抽象数据类型:
三.用Python实现栈
注: 列表尾部作为栈的顶部的实现,对append方法和pop方法的时间复杂度都是O(1) 例:匹配括号‘( )’ ????????描述:从左到右读取一个括号串,然后判断其中的括号是否匹配(当从左到右处理括号时,最右边的无匹配左括号必须和接下来遇到的第一个右括号相匹配,并且第一个位置的左括号可能需要等到处理到最后一个位置的右括号才能匹配)? ????????思路:由一个空栈开始,由左至右依次处理括号,如果遇到左括号,则利用push方法加入栈,如果遇到右括号,则利用pop方法;只要栈中的所有左括号都有右括号匹配,整个括号串就是匹配的,处理完之后栈为空栈
例:匹配符号‘( [ { } ] )’ ? ? ? ? 描述:和单独的括号相比,区别在于当出现右符号时,必须检测其类型是否和栈顶的左符号类型相匹配
例:将十进制转化成二进制 ? ? ? ? 思路:利用一种‘除以2’的算法,该算法使用栈来保存二进制结果的每一位(注:利用该方法,栈的元素输出顺序为顶部到底部)
例:前序、中序和后序表达式 ? ?? ?1.从中序向前序和后序转换 ? ? ? ? 思路:首先使用完全括号表达式,例如将A+B*C写作(A+(B*C)),若转化为后序则将运算符移动到右括号对应的位置,反之亦然 ? ?2.从中序到后序的通用转换方法 ? ? ? ? 思路: ????????1)创建用于保存运算符的空栈opstack,和一个用于保存结果的空列表 ? ? ? ? 2)利用split函数将输入的中序表达式转换成一个列表 ? ? ? ? 3)自左向右扫描这个标记列表 ? ? ? ? 3.1.如果标记是操作数,将其添加到结果列表的末尾 ? ? ? ? 3.2.如果标记是左括号,将其压入opstack栈中 ? ? ? ? 3.3.如果标记是右括号,反复从opstack栈中移除元素,直到移除对应的左括号。将从栈中取出的每一个运算符都添加到结果列表的末尾 ? ? ? ? 3.4.如果标记是运算符,将其压入opstack栈中。在此之前,需要从栈中取出优先级更高或相同的运算符,并将它们添加到结果列表的末尾
3.计算后序表达式 ? ? ? ? 思路: ? ? ? ? 1.创建空栈operandStack ? ? ? ? 2.使用字符串方法split将输入的后序表达式转换成一个列表 ? ? ? ? 3.从走往右扫描列表 ? ? ? ? 3.1.如果标记是操作数,转换成整数并压入operandStack栈中 ? ? ? ? 3.2.如果标记是运算符,从?operandStack栈中取出两个操作数(注:由于除法运算中有顺序问题,因此对所有的运算符,步骤均为第一次取出右操作数,第二次取出左操作数)
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 13:51:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |