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 相关文章推荐
分享15个最受欢迎的Python开源框架
Jul 13 Python
用python实现面向对像的ASP程序实例
Nov 10 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
Python调用命令行进度条的方法
May 05 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
Python字符串的全排列算法实例详解
Jan 07 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
如何通过命令行进入python
Jul 06 Python
python Matplotlib模块的使用
Sep 16 Python
Django配置跨域并开发测试接口
Nov 04 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 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中调用JAVA
2006/10/09 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python中的元类编程入门指引
2015/04/15 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
python  logging日志打印过程解析
2019/10/22 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
python实现猜单词游戏
2020/05/22 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
天巡全球:Skyscanner Global
2017/06/20 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
我的中国梦演讲稿高中篇
2014/08/19 职场文书
绿色校园广播稿
2014/10/13 职场文书
2015年共青团工作总结
2015/05/15 职场文书