python定义栈_Python栈实现
栈
下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型.
其中添加移除新项总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的例子很常见,想象桌上有一堆书., 只有顶部的那本书封面可见,要看到其他书的封面,只有先移除他们上面的书.
image
下图反应了栈中数据加入和移走的顺序:
image
栈的抽象数据类型
一个栈一般会实现以下方法:
Stack() 构造方法,创建一个空栈,无参数,返回值是空栈
push(value) 向栈顶压入一个新数据项,需要一个数据项参数,无返回值
pop() 抛出栈顶数据项,无参数,返回被抛出的数据项,栈本身发生变化
is_empty() 测试栈是否空栈。不需要参数,返回布尔值
size() 返回栈内数据项的数目,不需要参数,返回值是整数
peak() 返回栈顶数据项,但不删除。不需要参数,栈不变
栈的python实现(一)
利用.append与.pop方法,我们可以把python内置的列表当作栈来使用(栈是一种特殊的列表),这是一种较为方便的实现方式
class Stack:
def __init__(self):
self.values = []
def push(self, value):
self.values.append(value)
def pop(self):
return self.values.pop()
def is_empty(self):
return self.size() == 0
def size(self):
return len(self.values)
def peak(self):
return self.values[self.size()-1]
栈的python实现(二)
或者自由定义类似列表的Stack类
class Node: ➊
def __init__(self, value):
self.value = value
self.next = None
class Stack: ➋
def __init__(self):
self.top = None
def push(self, value):
node = Node(value)
node.next = self.top
self.top = node
def pop(self):
node = self.top
if node is None:
raise Exception('This is an empty stack')
self.top = node.next
return node.value
def peek(self):
node = self.top
if node is None:
raise Exception('This is an empty stack')
return node.value
def is_empty(self):
return not self.top
def size(self):
node = self.top
count = 0
if node is None:
raise Exception('This is an empty stack')
while node is not None:
count += 1
node = node.next
return count
if __name__ == '__main__':
stack = Stack()
stack.push(2)
stack.push(3)
# print(stack.pop())
# print(stack.top.value)
print(stack.peek())
print(stack.is_empty())
print(stack.size())
➊ 定义一个结点
image
➋ 定义一个栈
image
top指向栈顶的Node,next之想下一个Node,若没有下一个Node,则指向一个None
栈的应用
十进制转二进制 是一个应用堆栈的典型案例。十进制转二进制 采用“除2取余,逆序排列”的方法,如图所示:
image
借助Stack类,可以很方便地实现上述转换算法:
def divideBy2(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2
# 将余数逐个加入
remstack.push(rem)
decNumber = decNumber // 2
binString = ""
while not remstack.is_empty():
binString = binString + str(remstack.pop())
return binString
if __name__ == '__main__':
print(divideBy2(42))
运行结果:
$ python dec2bin.py
101010
相关链接
python定义栈_Python栈实现相关推荐
- python实现栈_Python 栈
栈抽象数据类型由下面的结构和操作定义.栈是元素的有序集合,添加操作与移除操作都发生在其顶端.栈的操作顺序是 LIFO,它支持以下操作: Stack() 创建一个空栈.它不需要参数,且会返回一个空栈. ...
- python定义整数_Python | 程序定义一个整数值并打印
python定义整数 Define an integer value in a variable and print it in Python. 在变量中定义一个整数值,然后在Python中打印出来. ...
- python定义词典_python – 自定义类是一个字典,但初始化没有字典副本?
出于易读性的目的,我希望有一个自定义类,其行为与dict完全相同(但是带有有意义的类型,而不是更通用的dict类型): class Derivatives(dict): "Dictionar ...
- python定义符号常量_python注释、变量、常量的学习
注释.变量.常量的学习 注释 什么是注释 注释是对代码的解释,方便后期的阅读代码,可以使在后期的代码维护中事半功倍. 注释的作用 注释可以用来排查代码中的BUG,在一段有BUG的代码当中,用注释选中其 ...
- python 定义数字_Python:已定义数字列表的差异
我正在尝试创建一个打印已定义数字列表的方差的函数: grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] 到目前为止,我 ...
- python定义符号常量_python从零开始学习(二):python中的变量与常量
一.python变量与常量里的定义 变量:在内存中开辟一块区域,储存值,可以理解为给值起一个名字.例子 a=1,a就是变量,1就是值 常量:程序运行中不会改变的值,大部分情况和变量一起使用. 例子 ...
- python定义集合_Python - 集合
在数学上,一组是不以任何特定顺序的项目的集合.Python集合与此数学定义类似,但有以下附加条件. 该集合中的元素不能重复. 该集合中的元素是不可变的(不能被修改),但集合作为一个整体是可变的. 没有 ...
- python定义变量_Python基础 变量的基本使用
变量的基本使用 程序就是用来处理数据的,而变量就是用来存储数据的 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 ...
- [转载] python定义整型常量_Python笔记——数据类型、变量和常量
参考链接: Python变量,常量和文字 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频 ...
最新文章
- constructor
- mysql_safe后重启_mysql无限重启是什么情况
- 第6章 C控制语句:循环
- centos下resin4启动一会儿自动关闭处理
- C++ Primer 第11章 泛型算法 学习总结
- 文件I/O实践(3) --文件共享与fcntl
- Golang 标准库--strings
- Oracle 数据库的基本用法
- HDU 1576 A/B(数论简单题,求逆元)
- 对Javascript的原型,原型链和继承的个人理解
- DPDK初始化分析(二)
- HTML和Jsp 页面使用 shiro标签备忘录
- mysql oracle视频网盘_动力节点MySQL数据库视频 百度云 网盘 下载
- VC编程--玩转控件(Windows编程简介)
- 华为会强迫升级鸿蒙,华为手机升级鸿蒙系统好用吗
- **matlab中grid、grid on 和grid off用法**
- 基于python爬虫下载网站在线视频
- 空军资深战略研究员:房地产支撑不起大国崛起
- 从零开始安装Gentoo
- ROM、PROM、EPROM、EEPROM、Flash ROM分别指什么?
热门文章
- 【原创】Linux基础之去掉windows中的\r
- HDU3507-Print Article-斜率dp入门题
- sql 排序 分组 层级 筛选 - God聚会啊
- 无限分级 层次输出 demo
- 面向接口编程 (噬菌体) 不错的接口
- 用学生编程记录预测学习成果,第二届计算机教育数据挖掘大赛, 赢取现金奖励+顶刊发表机会!...
- 大数据“高烧不断”,“得数据者得天下”的关键在哪?
- 机器学习的下一站:AutoML | 文末送书
- 3D重建传统算法对比深度学习,SFU谭平:更需要的是二者的融合
- mysql less6教程_Sqli labs系列-less-56 报错注入法(上)