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

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

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

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

  2. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  3. python中case的用法_用 Python 实现简单的 switch/case 语句

    在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...

  4. python中ndim是什么_使用Python中的ndim和shape属性获取darray数据的维度、长度、形状和其他参数,python,ndarray,等...

    我们在描述一个多维数组的时候,经常会用到两个参数:维度(dimension)和形状(shape),以二维数组为例,我们可以用矩阵来形象地联想这两个参数,对于矩阵,显然我们最常见的矩阵是二维的,所以他的 ...

  5. python中类似对象吗_在Python中,两个对象什么时候相同? - python

    似乎2 is 2和3 is 3在python中始终为true,通常,对整数的任何引用都与对相同整数的任何其他引用相同. None(即None is None)也是如此.我知道用户定义类型或可变类型不会 ...

  6. python中nomodulenamed怎么解决_关于 python ImportError: No module named 的问题

    今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 当时急着用,就顺手直接源码编译了一 ...

  7. python中函数的调用_慢步python,编程中函数的概念,python中函数的声明和调用

    函数,曾经是一个很高大尚的概念.笔者是在高中数学里认识的函数,先是从y=2x+3 这条代数式开始的.y是因变量,x是自变量,y因为x取值的变化而变化. 再后来式子变成这样:f(x)=2x+3,f(x) ...

  8. python中var是什么_这些Python Number 知识你需要了解!

    原标题:这些Python Number 知识你需要了解! 如果把编程比作建房子,那么数据就是建材.而建材有砖头.水泥.木头.钢材等,不同类型的建材配合工作,才能把房子建好.编程也一样,不同类型的数据类 ...

  9. 简述python中面向对象的概念_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

最新文章

  1. 公共技术点之 Java 反射 Reflection
  2. 模拟http中需要注意到的headers字段
  3. 高效万进制——蓝桥杯|HDOJ 1002 大数加法——30行代码AC
  4. 网络计算机 用户名和密码,局域网需要用户名和密码怎么办
  5. mysql的natural join_MySQL基础之Natural Join用法
  6. linux mailbox模型
  7. Delphi使用server组件控制excel的一点经验
  8. ArcGIS操作小技巧(五)之色带-----横向(水平)图例
  9. TFTP 简单文件传输协议 简介
  10. 机械制图与计算机绘图的区别,机械制图与计算机绘图教案.doc
  11. android自定义加载旋转框
  12. mp3外链,文件上传,QQ空间永久背景音乐,mp3连接,
  13. H3C交换机SNMP配置
  14. scratch教程——弹球游戏
  15. 被 HR 直接怼:估计你一辈子就是个程序员
  16. 和菲利普•科特勒的《营销管理》一样,这些都是比较好的市场营销书籍
  17. 软件测试自动化分类,自动化测试的主要分类
  18. python提取身份证信息_Python selenium 身份证信息在线解析爬取
  19. MFC+opencv实现摄像头的打开与关闭
  20. 简易计算器(非常简单)本文为转载

热门文章

  1. LoadRunner 测试Oracle数据库及Siebel性能
  2. 2.5-冗余VLAN
  3. 架构漫谈:我心中的架构
  4. MapReduce源码分析之JobSplitWriter
  5. poj1182(加权值的并查集)
  6. asp.net 页面全生命周期
  7. 王勇详谈 Linux Deepin 背后的故事
  8. C语言程序的存储区域
  9. 阿里云时空数据库引擎HBase Ganos上线,场景、功能、优势全解析
  10. Python文件基本操作