文章目录

  • 栈(Stack)
  • 栈的实现
  • 栈的应用
    • LeetCode 20th(有效的括号)
    • LeetCode 405. 数字转换为十六进制数

栈(Stack)

栈是一个有次序的数据集,每个数据项仅从”栈顶“一端加入到数据集中、从数据集中移除,栈具有后进先出(LIFO)特性。

  • 在栈中,数据项的加入和移除都仅发生在同一端;这一端叫做栈顶top,另一端叫栈底base;
  • 距离栈底越近的数据,留在栈中的时间越长;
  • 后进先出LIFO特性;
  • 翻转次序,进栈和出栈的次序正好相反。
ls = [1,2,3,'dog',5,6,7,8]
s = Stack()
for i in ls:s.push(i)
while not s.isEmpty():print(s.pop())

栈的实现

数组(列表实现)栈。

# 创建一个空栈,不包含任何数据
class Stack(object):def __init__(self):self.items = []# 返回栈是否为空def isEmpty(self):return self.items == []# 将数据添加到栈顶def push(self, item):self.items.append(item)#将栈顶数据移除def pop(self):return self.items.pop()# 返回栈顶数据,不修改栈def peek(self):return self.items[len(self.items)-1]# 返回栈中数据长度def size(self):return len(self.items)
from ADT_CLASS import Stacks = Stack()
print(s.isEmpty())
s.push(1)
s.push('cat')
print(s.peek())
s.push(3)
print(s.size())
s.push(4)
print(s.pop())
print(s.pop())
print(s.size())
输出:
True
cat
3
4
3
2

栈的应用

LeetCode 20th(有效的括号)

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
from ADT_CLASS import Stackdef isValid(s):stack = Stack()com = Trueindex = 0while index < len(s) and com:if s[index] in '([{':stack.push(s[index])else:if stack.isEmpty():com = Falseelse:l = stack.pop()if not matches(l, s[index]):com = Falseindex += 1if com and stack.isEmpty():return Trueelse:return False
def matches(l,r):opens = '([{'closers = ")]}"return opens.index(l) == closers.index(r)

LeetCode 405. 数字转换为十六进制数


进制转换:
二进制有两个不同数字:0,1
八进制有八个不同数字:0,1,2,3,4,5,6,7
十六进制有十六个不同数字:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

在代码中我们可以通过调参base实现不同进制转换。

from ADT_CLASS import Stack
def toConverter(num, base):digits = '0123456789ABCDEF's = Stack()while num > 0:cur = num % bases.push(cur)num = num // baseans = ''while not s.isEmpty():ans += digits[s.pop()]return ans

注意:这里我们只处理了num>0的转换情况,如果是小于等于0的数需要另外讨论。
ADT_CLASS为我写的类文件,这样在使用的时候导入就可以了,比较方便。

栈及其python实现相关推荐

  1. python学全栈还是运维_Python全栈学习——Python基础及Web开发

    原标题:Python全栈学习--Python基础及Web开发 在DevOps火热的敏捷行业中,无论是开发还是运维都在互联网快速发布下练就了一身的本领,微服务下的敏捷开发体系及智能运维体系都在实战中逐步 ...

  2. 数据结构之 栈 (Python 版)

    数据结构之 栈 (Python 版) -- 利用线性表实现栈 栈的特性: 后进先出 基于顺序表实现栈 1 class SStack(): 2 3 ''' 4 基于顺序表 实现的 栈类 5 ''' 6 ...

  3. 全栈开发-Python的介绍

    全栈开发-Python的介绍 本篇刚要 Python的诞生 Python的应用领域 Python的优缺点 Python的解释器 Python的发展史 Python2 or Python3? 一. Py ...

  4. 视频教程-Python全栈视频教程-Python

    Python全栈视频教程 毕业于清华大学,曾担任Google算法工程师,微软人工智能领域全球最具价值专家,微软Tech Ed 大会金牌讲师. 精通C/ C++,Python ,Go语言,Sicikit ...

  5. python全栈慕课网靠谱么_全栈和python的区别 ?

    1,全栈指的是人. 2,Python是一门编程语言. 全栈: 1,公司创始人/Co Founder全栈:技术+产品+设计+运营+销售+法务+融资+PR.作为公司创始人,在早期真的就是chief eve ...

  6. python global用法_【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  7. 栈中pop和top的区别是什么呢?用队列实现一个栈,Python语言

    区别: pop是弹出栈顶元素,top是获得栈顶元素,不弹出  pop弹出后可以获取,把弹出的东西付给某个变量 具体可以通过用队列实现一个栈来分析原因. #用队列实现栈 class Stack:&quo ...

  8. python全栈和java全栈_全栈和python的区别

    首先我们来e68a84e8a2ad62616964757a686964616f31333366303138看看Python在公司的一些基础应用: 1.验证算法:就是对公司一些常见设计算法或者公式的验证 ...

  9. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

  10. 【栈】python、单调栈解决收集雨水问题、力扣42题

    以下是leetcode 42原题: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例 1: 输入:height = [0,1,0,2,1,0,1 ...

最新文章

  1. [MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题
  2. win7/8SVN必备的4个服务
  3. c语言探测次数不超过4的哈希算法,HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)...
  4. jQuery停止动画
  5. 一份C++学习资源整理,咬牙切齿地好用。
  6. 2018 KubeCon + CloudNativeCon完美落幕,行云献力
  7. Arrays类中的binarysearch
  8. 自定义标题栏右键菜单
  9. 3个关于HR的OKR的优秀案例
  10. 基于python的论文前言怎么写_毕业论文前言怎么写
  11. vue+element在IE中遇到的问题
  12. 达人评测 r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
  13. mysql的时间模糊chax_MySQL™ 参考手册(通用安装指南)
  14. 为此计算机上所有用户安装此加载项,win7打开特定网站提示“控件无法安装,windows已阻止此软件因为无法验证发行者”怎么办...
  15. 【文献阅读】 Sorghum segmentation by skeleton extraction
  16. 百度语音合成Rest API使用
  17. 英语思维导图大全 前言(一)
  18. OpenCV VideoCapture 设置和获取摄像头参数
  19. .osr 文件格式解析(二) - 数据类型
  20. 无中继的DHCP配置-ZTE中兴路由器

热门文章

  1. Laravel redis队列不执行
  2. 软件测试(二)——软件测试基础篇
  3. easyPoi 注解导出 动态隐藏列
  4. 用Python写一个交易的风险控制模型
  5. 【笨嘴拙舌WINDOWS】编码历史
  6. SIMATIC G120 故障报A07991解决方法
  7. 计算机磁盘的管理实验总结,[计算机]磁盘管理实验报告.doc
  8. Fabric 1.0源代码分析(2) blockfile(区块文件存储)
  9. 【备注】【C42】《编写高质量代码:改善Python程序的91个建议》PDF
  10. ROS使用教程-关于rosparam