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使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python os模块学习笔记
Jun 21 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Python3内置模块random随机方法小结
Jul 13 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
matplotlib阶梯图的实现(step())
Mar 02 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
2006/12/14 PHP
ADODB的数据库封包程序库
2006/12/31 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
js函数排序的实例代码
2013/07/01 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
物流专业大学生求职信范文
2013/10/28 职场文书
质检员的岗位职责
2013/11/15 职场文书
数控专业推荐信范文
2013/12/02 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
警示教育活动总结
2014/05/05 职场文书
化工工艺设计求职信
2014/06/25 职场文书
归元寺导游词
2015/02/06 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Minikube搭建Kubernetes集群
2022/03/31 Servers