设计自定义栈类,模拟入栈、出栈、判断栈是否为空、是否已满以及改变栈大小等操作。

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列表进行封装和二次开发实现自定义栈结构相关推荐

  1. python中的栈结构_对Python列表进行封装和二次开发实现自定义栈结构

    设计自定义栈类,模拟入栈.出栈.判断栈是否为空.是否已满以及改变栈大小等操作. class Stack: #构造方法 def __init__(self, maxlen = 10): self._co ...

  2. dedecms二次开发:自定义模型使用教程

    dedecms二次开发:自定义模型使用教程 在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章.图集.软件.商品.分类信息.专题.通过系统 ...

  3. NX二次开发-UFUN自定义尺寸导出NX窗口区域图像UF_DISP_create_framed_image

    NX二次开发-UFUN自定义尺寸导出NX窗口区域图像UF_DISP_create_framed_image NX9+VS2012#include <uf.h> #include <u ...

  4. python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  5. python控制caxa模块_CAXA二次开发实用手册.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械软件 CAXA二次开发实用手册.doc119页 本 ...

  6. pytest框架二次开发之自定义注解

    目录 一.背景: 二.闭包与装饰器(可以跳过这一章) 2.1 .什么是闭包 2.2 闭包的用途 2.3 .装饰器(decorator) 三.pytest自定义注解@author 3.1 自定义注解@a ...

  7. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

  8. python 堆栈_利用Python列表实现堆栈(二):实现

    以下定义了一个全功能的堆栈类:class error(Exception): pass # when imported: local exception class Stack: def __init ...

  9. python列表字母排序_Python_list(二)列表排序

    list排序 按字母顺序排序 sort() .sort() 按字母排序,再也无法恢复到原来的排列顺序 示范 >>> name = ['congcong', 'yuxi', 'jing ...

最新文章

  1. 加密解密php,PHP实现的加密解密处理类
  2. AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……
  3. linux加入windows域之完美方案
  4. option:contains后面加变量_Python基础篇 -2:初识Python中的变量
  5. Python virtualenv激活与退出虚拟环境
  6. QT 文字字体和颜色设置
  7. 使用Arquillian,Docker和Selenium使Web UI测试再次变得出色(第1部分)
  8. android申请权限一次性申请多个,android 6.0以上动态一次申请多个权限-最美解决方案...
  9. 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
  10. maven 单独构建多模块项目中的单个模块
  11. C语言libcurl:Uses the CURLINFO_TLS_SESSION data.
  12. mysql innodb排他锁_mysql 中innoDB引擎的事务喝共享锁喝排他锁
  13. 三星宣布7nm LPP芯片量产!性能高20%,功耗降50%,面积降40%
  14. Mock Serverj
  15. WildPacket AiroPeek EtherPeek OmniPeek
  16. 深圳市区卫星地图 百度卫星地图高清版(含道路地名标签叠加)
  17. MSG360虚拟服务器,H3C MSG360-10:简单设置+多场景结合应用
  18. linux、centOS虚拟机出现entering emergency mode解决方案
  19. 4种公众号文章编辑器亲测对比
  20. Centos Linux 可视化管理工具

热门文章

  1. mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
  2. 天逸ad一66da_深入解析天逸ad66d与ad66a哪个好?区别是?内幕评测吐槽
  3. c 如何加函数锁linux,Linux下C语言中fcntl函数用法说明
  4. 计算机识别键盘流程,通过计算机视觉的方式识别并判断键盘输入
  5. 3gpp协议_C-V2X: 3GPP协议阅读前的一些准备
  6. php 判断字数,PHP实时统计中文字数和区别
  7. ORACLE 10G rman 备份脚本
  8. 计算机教学改革主要内容,计算机教学改革主要内容和措施.doc
  9. 聊聊 HTTP 协议的知识点
  10. WebLogic在Linux环境下安装