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中操作字典之fromkeys()方法的使用
May 21 Python
在Python的Django框架中编写编译函数
Jul 20 Python
Python基于有道实现英汉字典功能
Jul 25 Python
用python实现的线程池实例代码
Jan 06 Python
python去掉空白行的多种实现代码
Mar 19 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
解决Python3下map函数的显示问题
Dec 04 Python
基于python3的socket聊天编程
Feb 17 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 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
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php&mysql 日期操作小记
2012/02/27 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
php对象工厂类完整示例
2018/08/09 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
Python之reload流程实例代码解析
2018/01/29 Python
python3 爬取图片的实例代码
2018/11/06 Python
详解Flask前后端分离项目案例
2020/07/24 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
主管会计岗位职责
2014/03/13 职场文书
公司外出活动方案
2014/08/14 职场文书
党员四风剖析材料
2014/08/27 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript