Python栈的实现方法示例【列表、单链表】


Posted in Python onFebruary 22, 2020

本文实例讲述了Python栈的实现方法。分享给大家供大家参考,具体如下:

Python实现栈

  • 栈的数组实现:利用python列表方法

代码如下:

# 列表实现栈,利用python列表方法
class listStack(object):

  def __init__(self):
    self.items = []

  def is_empty(self):
    return self.items == 0

  def size(self):
    return len(self.items)

  def top(self):
    return self.items[len(self.items)-1]

  def push(self, value):
    return self.items.append(value)

  def pop(self):
    return self.items.pop()
if __name__ =="__main__":
  stack = listStack()
  stack.push("welcome")
  stack.push("www")
  stack.push("3water")
  stack.push("net")
  print "栈的长度:", stack.size()
  print "\n".join(['%s:%s' % item for item in stack.__dict__.items()]) #打印栈stack所有元素
  print "出栈:",stack.pop()
  print "出栈:",stack.pop()
  print "出栈:",stack.pop()

运行结果:

栈的长度: 4
items:['welcome', 'www', '3water', 'net']
出栈: net
出栈: 3water
出栈: www

  • 栈的链表实现:

栈的链表实现中,压栈(push)类似于在单链表中表头添加节点;出栈(pop)类似于链表中表头删除节点并返回对应节点值;栈顶元素(top)就是获取链表中的第一个元素

链表节点的定义直接嵌套在链表栈类中

代码如下:

# 链表实现栈
class linkedStack(object):

  class Node(object):
    def __init__(self, value=None, next=None):
      self.value = value
      self.next = next

  def __init__(self):
    self.top = None
    self.length = 0

  def is_empty(self):
    return self.length == 0

  def size(self):
    return self.length

  # 获取栈顶元素
  def get(self):
    if self.is_empty():
      raise Exception("Stack is empty!")
    return self.top.value

  # 压栈
  def push(self, value):
    node = self.Node(value)
    old_top = self.top
    self.top = node
    node.next = old_top
    self.length += 1

  # 出栈
  def pop(self):
    if self.length == 0:
      raise Exception("Stack is empty!")

    item = self.top.value
    curnode = self.top.next
    self.top.next = self.top
    self.top = curnode
    self.length -= 1
    return item
if __name__ =="__main__":
  stack = linkedStack()
  stack.push("welcome")
  stack.push("www")
  stack.push("3water")
  stack.push("net")
  print "栈的长度:", stack.size()
  print "出栈:",stack.pop()
  print "出栈:",stack.pop()
  print "出栈:",stack.pop()
  print "出栈:",stack.pop()

运行结果:

栈的长度: 4
出栈: net
出栈: 3water
出栈: www
出栈: welcome

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python上传package到Pypi(代码简单)
Feb 06 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
详解如何使用Python编写vim插件
Nov 28 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
python实现滑雪者小游戏
Feb 22 #Python
python实现拼图小游戏
Feb 22 #Python
Python双链表原理与实现方法详解
Feb 22 #Python
Python单链表原理与实现方法详解
Feb 22 #Python
python函数enumerate,operator和Counter使用技巧实例小结
Feb 22 #Python
python通过文本在一个图中画多条线的实例
Feb 21 #Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 #Python
You might like
PHP查询网站的PR值
2013/10/30 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python字符串替换实例分析
2015/05/11 Python
Python手机号码归属地查询代码
2016/05/04 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
舞蹈教师自荐信
2014/01/27 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
小王子读书笔记
2015/06/29 职场文书
学生会自荐信
2019/05/16 职场文书
MySQL Server层四个日志的实现
2022/03/31 MySQL