对Python列表进行封装和二次开发实现自定义栈结构
设计自定义栈类,模拟入栈、出栈、判断栈是否为空、是否已满以及改变栈大小等操作。
class Stack:
#构造方法
def __init__(self, maxlen = 10):
self._content = []
self._size = maxlen
self._current = 0
#析构方法,释放列表控件
def __del__(self):
del self._content
#清空栈中的元素
def clear(self):
self._content = []
self._current = 0
#测试栈是否为空
def isEmpty(self):
return not self._content
#修改栈的大小
def setSize(self, size):
#不允许新大小小于已有元素数量
if size < self._current:
print('new size must >=' + str(self._current))
return
self._size = size
#测试栈是否已满
def isFull(self):
return self._current == self._size
#入栈
def push(self, v):
if self._current < self._size:
#在列表尾部追加元素
self._content.append(v)
#栈中元素个数加1
self._current = self._current + 1
else:
print('Stack Full!')
#出栈
def pop(self):
if self._content:
#栈中元素个数减1
self._current = self._current - 1
#弹出并返回列表尾部元素
return self._content.pop()
else:
print('Stack is empty!')
def __str__(self):
return 'Stack(' + str(self._content) +', maxlen=' + str(self._size) + ')'
#复用__str__方法的代码
__repr__ = __str__
将代码保存为myStack.py文件,下面的代码演示了自定义栈结构的用法。
>>> from myStack import Stack #导入自定义栈
>>> s = Stack() #创建栈对象
>>> s.push(5) #元素入栈
>>> s.push(8)
>>> s.push('a')
>>> s.pop() #元素出栈
'a'
>>> s.push('b')
>>> s.push('c')
>>> s #查看栈对象
Stack([5, 8, 'b', 'c'], maxlen=10)
>>> s.setSize(8) #修改栈大小
>>> s
Stack([5, 8, 'b', 'c'], maxlen=8)
>>> s.setSize(3)
new size must >=4
>>> s.clear() #清空栈元素
>>> s.isEmpty()
True
>>> s.setSize(2)
>>> s.push(1)
>>> s.push(2)
>>> s.push(3)
Stack Full!
对Python列表进行封装和二次开发实现自定义栈结构相关推荐
- python中的栈结构_对Python列表进行封装和二次开发实现自定义栈结构
设计自定义栈类,模拟入栈.出栈.判断栈是否为空.是否已满以及改变栈大小等操作. class Stack: #构造方法 def __init__(self, maxlen = 10): self._co ...
- dedecms二次开发:自定义模型使用教程
dedecms二次开发:自定义模型使用教程 在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章.图集.软件.商品.分类信息.专题.通过系统 ...
- NX二次开发-UFUN自定义尺寸导出NX窗口区域图像UF_DISP_create_framed_image
NX二次开发-UFUN自定义尺寸导出NX窗口区域图像UF_DISP_create_framed_image NX9+VS2012#include <uf.h> #include <u ...
- python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解
第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...
- python控制caxa模块_CAXA二次开发实用手册.doc
您所在位置:网站首页 > 海量文档  > 汽车/机械/制造 > 机械软件 CAXA二次开发实用手册.doc119页 本 ...
- pytest框架二次开发之自定义注解
目录 一.背景: 二.闭包与装饰器(可以跳过这一章) 2.1 .什么是闭包 2.2 闭包的用途 2.3 .装饰器(decorator) 三.pytest自定义注解@author 3.1 自定义注解@a ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- python 堆栈_利用Python列表实现堆栈(二):实现
以下定义了一个全功能的堆栈类:class error(Exception): pass # when imported: local exception class Stack: def __init ...
- python列表字母排序_Python_list(二)列表排序
list排序 按字母顺序排序 sort() .sort() 按字母排序,再也无法恢复到原来的排列顺序 示范 >>> name = ['congcong', 'yuxi', 'jing ...
最新文章
- 加密解密php,PHP实现的加密解密处理类
- AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……
- linux加入windows域之完美方案
- option:contains后面加变量_Python基础篇 -2:初识Python中的变量
- Python virtualenv激活与退出虚拟环境
- QT 文字字体和颜色设置
- 使用Arquillian,Docker和Selenium使Web UI测试再次变得出色(第1部分)
- android申请权限一次性申请多个,android 6.0以上动态一次申请多个权限-最美解决方案...
- 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
- maven 单独构建多模块项目中的单个模块
- C语言libcurl:Uses the CURLINFO_TLS_SESSION data.
- mysql innodb排他锁_mysql 中innoDB引擎的事务喝共享锁喝排他锁
- 三星宣布7nm LPP芯片量产!性能高20%,功耗降50%,面积降40%
- Mock Serverj
- WildPacket AiroPeek EtherPeek OmniPeek
- 深圳市区卫星地图 百度卫星地图高清版(含道路地名标签叠加)
- MSG360虚拟服务器,H3C MSG360-10:简单设置+多场景结合应用
- linux、centOS虚拟机出现entering emergency mode解决方案
- 4种公众号文章编辑器亲测对比
- Centos Linux 可视化管理工具
热门文章
- mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
- 天逸ad一66da_深入解析天逸ad66d与ad66a哪个好?区别是?内幕评测吐槽
- c 如何加函数锁linux,Linux下C语言中fcntl函数用法说明
- 计算机识别键盘流程,通过计算机视觉的方式识别并判断键盘输入
- 3gpp协议_C-V2X: 3GPP协议阅读前的一些准备
- php 判断字数,PHP实时统计中文字数和区别
- ORACLE 10G rman 备份脚本
- 计算机教学改革主要内容,计算机教学改革主要内容和措施.doc
- 聊聊 HTTP 协议的知识点
- WebLogic在Linux环境下安装