MAX_SIZE = 100

classMyStack1(object):"""模拟栈"""

def __init__(self):

self.items=[]

self.size=0defis_empty(self):"""判断是否为空"""

return self.size ==0defsize(self):"""返回栈的大小"""

returnself.sizedefpush(self, item):"""压栈(加入元素)"""self.items.append(item)

self.size+= 1

defpop(self):"""弹栈(弹出元素)"""

if self.size < MAX_SIZE and self.size >=0:

self.size-= 1

returnself.items.pop()else:print("栈已经为空")returnNonedefpeek(self):if notself.is_empty():return self.items[self.size-1]else:returnNonedef __str__(self):returnstr(self.items)classMyStack2(object):"""模拟栈"""

def __init__(self):

self.items=[]

self.size=0defis_empty(self):"""判断是否为空"""

return self.size ==0defsize(self):"""返回栈的大小"""

if self.size <=MAX_SIZE:returnself.sizedefpush(self, item):"""压栈(加入元素)"""

if self.size <=MAX_SIZE:

self.items.insert(0, item)

self.size+= 1

defpop(self):"""弹栈(弹出元素)"""

if self.size > 0 and self.size <=MAX_SIZE:

self.size-= 1

returnself.items.pop(0)else:print("栈已经为空")returnNonedefpeek(self):"""返回栈顶元素"""

if notself.is_empty():returnself.items[0]else:returnNonedef __str__(self):returnstr(self.items)classNode():def __init__(self, data, next=None):

self.data=data

self.next=nextdef __repr__(self):returnstr(self.data)classNodeStack():def __init__(self):

self.node=Node(None)

self.head=self.node

self.size=0defis_empty(self):return self.size ==0defget_size(self):returnself.sizedefpush(self, data):

node=Node(data)

node.next=self.head.next

self.head.next=node

self.size+= 1

defpop(self):if notself.is_empty():

current=self.head.nextif self.get_size() == 1:

self.head.next=Noneelse:

self.head.next=self.head.next.next

self.size-= 1

returncurrent.dataelse:raise IndexError('pop from a empty stack')defpeek(self):if notself.is_empty():returnself.head.next.dataelse:raise IndexError('stack is empty')def __repr__(self):

stack_list=[]

current=self.headwhile current.next is notNone:

stack_list.append(current.next.data)

current=current.nextreturnstr(stack_list)__str__ = __repr__

deftest(obj):

i=obj()for x in range(0,6):

i.push(x)print(i)

i.pop()print(i, i.peek(), i.size)if __name__ == "__main__":

test(MyStack1)

test(MyStack2)

test(NodeStack)

python list是数组还是链表实现的_python 数据结构 list和链表实现栈的三种方法相关推荐

  1. python判断ip地址是否合法_Python课堂:判定IP地址合法性的三种方法

    IP IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法性校验的方法. IPv4的ip地址格式:(1~255).(0 ...

  2. Python 中list中所有值加和_Python 中去除列表中重复元素的5种方法

    (点击上方快速关注并设置为星标,一起学Python) 1.使用集合 Python中集合的元素是唯一的,具有去重的功能.使用集合与列表可以互转的特性,将列表转换为集合去重,再将集合转换为列表: def ...

  3. python如何去除列表中的重复项_Python 中去除列表中重复元素的5种方法

    (点击上方快速关注并设置为星标,一起学Python) 1.使用集合 Python中集合的元素是唯一的,具有去重的功能.使用集合与列表可以互转的特性,将列表转换为集合去重,再将集合转换为列表: def ...

  4. python字典找出年龄最大的人_python找出字典中value最大值的几种方法

    假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...

  5. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  6. 互相关函数python实现的三种方法

    本人前段时间在做地震波分析的时候用到互相关函数的计算,所以做了一些具体的研究和分析.用python实现信号的互相关可以有三种方法:一.直接用时域法.二.用频域法.三.python提供的numpy.co ...

  7. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  8. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)

    引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...

  9. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

最新文章

  1. 如何列出更改了特定文件的所有提交?
  2. 《OpenCV图像处理》——1.7 用户交互工具
  3. Qt/E中的键盘设备管理
  4. Python列表操作:统计列表中的重复项出现的次数的方法,不懂也要知道的python知识
  5. 年末最大AI盛典!2020深度学习开发者峰会报名启动
  6. 使用Gradle构建Monorepo项目
  7. 使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js
  8. xp 4g内存补丁_32位操作系统导致电脑可用内存不足4G
  9. hibernate实战第二版 蒲成带目录_太NB了! 阿里程序员带你玩转Spring:脑图+实战五+面试百问+知识总结...
  10. iOS 对arc的一点深入理解
  11. 15. 从远程库克隆
  12. www.gc.com.cn\/ios\/iphone.html,iOS系统安装gcc
  13. OpenCV IPLImage常用方法
  14. vue和layui哪个更好用_指纹锁哪个牌子更好用?
  15. DOS中del和rd的区别
  16. cdoj1087 基爷的中位数 二分
  17. 女生被逼疯的日记(课余篇)
  18. GeoJson数据合并
  19. 简单算法之丢手绢游戏/c++
  20. React-Native 开发实用指南

热门文章

  1. word 2013 标题设置多级列表
  2. MarkDown/Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)
  3. 循环,函数,指针作业
  4. Unity 找到隐藏的UGUI
  5. Thinkphp js、css压缩类minify
  6. 数据库系统原理复习提纲
  7. 大创中期报告怎么写_课题研究中期报告怎么写?这篇范文很说的很详细
  8. gitbook mysql_使用Gitbook做笔记
  9. oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件
  10. 重装谷歌浏览器chrome:未知错误导致安装失败