Python实现栈


定义栈类

class Stack(object):# 初始化栈为空列表def __init__(self):self.items = []# 判断栈是否为空,返回布尔值def is_Empty(self):return self.items == []# 返回栈顶元素# 如果为空返回Nonedef peek(self):if self.is_Empty():return Nonereturn self.items[len(self.items) - 1]# 返回栈大小def size(self):return len(self.items)   # 压栈,添加新元素进栈def push(self, item):self.items.append(item)# 出栈,删除栈顶元素def pop(self):return self.items.pop()

简单的栈测试

if __name__ == "__main__":# 初始化一个栈对象my_stack = Stack()my_stack.push('h')print("压栈:{}".format(my_stack.peek()))my_stack.push('a')print("压栈:{}".format(my_stack.peek()))print("此时栈大小为:{},栈顶元素为:{}".format(my_stack.size(), my_stack.peek()))print("出栈:{}".format(my_stack.pop()))print("栈是否为空:{}".format(my_stack.is_Empty()))print("此时栈大小为:{},栈顶元素为:{}".format(my_stack.size(), my_stack.peek()))print("出栈:{}".format(my_stack.pop()))print("栈是否为空:{}".format(my_stack.is_Empty()))print("此时栈大小为:{},栈顶元素为:{}".format(my_stack.size(), my_stack.peek()))print("栈是否为空:{}".format(my_stack.is_Empty()))"""压栈:h压栈:a此时栈大小为:2,栈顶元素为:a出栈:a栈是否为空:False此时栈大小为:1,栈顶元素为:h出栈:h栈是否为空:True此时栈大小为:0,栈顶元素为:None栈是否为空:True"""

栈应用——检测字符串中的括号是否成对

def syntaxChecker(string):stack = Stack()opens = '([{'closes = ')]}'balanced = Truefor i in string:if i in '([{':stack.push(i)elif i in ')]}':if stack.is_Empty():balanced = Falsebreakelse:j = stack.pop()if opens.find(i) != closes.find(j):balanced = Falsebreakif not stack.is_Empty():balanced = Falsereturn balanced
  • 首先创建一个栈对象,并新建一个包含所有左括号的数组和一个包含所有右括号的数组(注意同种括号下标需要对应),接着讲匹配状态设为True
  • 然后对输入的字符串进行判断
    • 如果匹配到左括号,则压栈
    • 如果匹配到右括号
      • 如果此时栈为空,匹配状态设为False,因为空栈缺少左括号肯定是不匹配
      • 如果栈不为空,则出栈当前的栈顶元素,如果此时符号类型匹配,则确定是一组括号
    • 循环直到无法匹配到括号
    • 最后判断如果栈不为空,则匹配失败,如果匹配成功则匹配状态不做修改仍为True
  • 返回匹配状态

栈应用——十进制转换为二进制

def decimal_to_bin(dec):stack = Stack()bin_str = ''if dec == 0:stack.push(0)while dec > 0:a = dec % 2stack.push(a)dec = int(dec / 2)while not stack.is_Empty():bin_str += str(stack.pop())return bin_str
  • 首先创建一个栈对象,和一个存储二进制数的字符串,函数传入待转换的十进制数
  • 提前判断该数是不是0,如果是0则直接压栈0
  • 非零则开始执行转换操作
    • 将十进制数%2后的结果压入栈
    • 然后将十进制数/2得到新的数
    • 如此循环直到所得十进制数小于一
    • 注意这个过程中为了避免小数所以执行了强制类型转换
  • 循环结束后如果栈不为空,则将之前压栈的元素全部按顺序出栈组成一个二进制的字符串,返回之

Python实现栈及其简单应用相关推荐

  1. python实现栈的操作_python简单实现队列和栈push、pop操作

    栈: # -*- coding: utf-8 -*- #定义序列 lst=[] def pop(): if(len(lst)==0): print"栈为空","无法出栈& ...

  2. 美国AI博士指出:60天掌握Python全栈需要...

    我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的: 先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, ...

  3. python利器手机版-将安卓手机打造成你的python全栈开发利器

    超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Qpython不支持lxml这个模块,然而pyt ...

  4. termux pythonlxml安装_将安卓手机打造成你的python全栈开发利器

    原标题:将安卓手机打造成你的python全栈开发利器 超神利器 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之 ...

  5. 基于Python技术栈的算法落地踩坑

    背景介绍 在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用sklearn pipeline,可以保存为XML格式的pmml供Java调用, 在配置为4 core,8G内存的 ...

  6. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  7. python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?

    Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...

  8. python实现栈的操作入站出站查找元素等_Python实现的栈(Stack)

    前言 Python本身已有顺序表(List.Tupple)的实现,所以这里从栈开始. 什么是栈 想象一摞被堆起来的书,这就是栈.这堆书的特点是,最后被堆进去的书,永远在最上面.从这堆书里面取一本书出来 ...

  9. 30岁学python全栈_知乎热帖!戳痛100万程序员:我30岁了,我还能学Python吗?

    " 每个人对如何度过一生有着不同的答案,最重要的不是要不要"开始学习Python",而是认识你自己. --LEWIS " 最近,在知乎上看到关于30岁能不能学P ...

最新文章

  1. python3.6for循环_使用parser_args值输入for循环(python3.6)
  2. C#中使用DbHelper连接SqlServer数据库
  3. 试题 历届试题 买不到的数目(dp/数学)
  4. Ubuntu常用软件安装(小集合)
  5. Bootstrap 编译版文件结构
  6. php排斥ajaxsubmit函数,jQuery中的ajaxSubmit详解
  7. angular-Forms patchValue and setValue
  8. 第三方支付龙头拉卡拉IPO过会
  9. python 程序运行时间长,python查看程序运行时间的方法
  10. 零知识证明 - bellman源码分析
  11. element-ui的标签页之间跳转 - 默认选中
  12. 精神分裂型患者大脑结构和功能连接的改变
  13. 深度至尊GHOST_XPSP3快速装机专业版V8.0
  14. 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息
  15. PTA 最佳情侣身高差
  16. 写一个程序来确定到底谁是凶手
  17. 4G网络车载GPS定位器隐藏装在车头影响LTE网络信号影响及因素
  18. 面渣逆袭:线程池夺命连环十八问
  19. 如何从excel的多行中随机选出n行
  20. 2021年N1叉车司机模拟考试题库软件及N1叉车司机全国真题汇总

热门文章

  1. 职场必知的20条黄金法则
  2. 服务器上可以跑,本地Pycharm中报错Ninja is required to load C++ extensions
  3. JAVA日常开发中常用的日志记录方式,攒个赞好不好?
  4. webRtc播放rtsp视频流(vue2、vue3+vite+ts)
  5. H.265与H.264的差异详解
  6. 天下事以难而废者十之一,以惰而废者十之九。(南北朝 颜之推 《颜氏家训》)...
  7. python 汉字 和 urlEncode 编码 互转
  8. 移动端图片鉴黄(可离线识别 200ms)
  9. 在html中打出一条虚线
  10. Hive实现共同好友统计