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之重回函数
Oct 10 Python
利用Python如何生成随机密码
Apr 20 Python
python中redis的安装和使用
Dec 04 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Django model update的多种用法介绍
Mar 28 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python如何进入交互模式
Jul 06 Python
python如何建立全零数组
Jul 19 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和MySQL保存和输出图片
2006/10/09 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
Yii配置文件用法详解
2014/12/04 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python队列的定义与使用方法示例
2017/06/24 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
挂职自我鉴定
2014/02/26 职场文书
社会调查研究计划书
2014/05/01 职场文书
高一新生军训方案
2014/05/12 职场文书
海洋天堂观后感
2015/06/05 职场文书
初三英语教学反思
2016/02/15 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技