Python实现栈和队列的简单操作方法示例


Posted in Python onNovember 29, 2019

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

先简单的了解一下数据结构里面的栈和堆:

栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:

stack:后进先出

Python实现栈和队列的简单操作方法示例

queue:先进先出

Python实现栈和队列的简单操作方法示例

stack和queue是不能通过查询具体某一个位置的元素而进行操作的。但是他们的排列是按顺序的

对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。

stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作

class Stack(object):
  def __init__(self):
    self.stack = []
  def push(self, value):  # 进栈
    self.stack.append(value)
  def pop(self): #出栈
    if self.stack:
      self.stack.pop()
    else:
      raise LookupError('stack is empty!')
  def is_empty(self): # 如果栈为空
    return bool(self.stack)
  def top(self): 
    #取出目前stack中最新的元素
    return self.stack[-1]

我们定义如下的链表来实现队列数据结构:

Python实现栈和队列的简单操作方法示例

定义一个头结点,左边指向队列的开头,右边指向队列的末尾,这样就可以保证我们插入一个元素和取出一个元素都是O(1)的操作,使用这种链表实现stack也是非常的方便。实现代码如下:

class Head(object):
  def __init__(self):
    self.left = None
    self.right = None
class Node(object):
  def __init__(self, value):
    self.value = value
    self.next = None
class Queue(object):
  def __init__(self):
    #初始化节点
    self.head = Head()
  def enqueue(self, value):
    #插入一个元素
    newnode = Node(value)
    p = self.head
    if p.right:
      #如果head节点的右边不为None
      #说明队列中已经有元素了
      #就执行下列的操作
      temp = p.right
      p.right = newnode
      temp.next = newnode
    else:
      #这说明队列为空,插入第一个元素
      p.right = newnode
      p.left = newnode
  def dequeue(self):
    #取出一个元素
    p = self.head
    if p.left and (p.left == p.right):
      #说明队列中已经有元素
      #但是这是最后一个元素
      temp = p.left
      p.left = p.right = None
      return temp.value
    elif p.left and (p.left != p.right):
      #说明队列中有元素,而且不止一个
      temp = p.left
      p.left = temp.next
      return temp.value
    else:
      #说明队列为空
      #抛出查询错误
      raise LookupError('queue is empty!')
  def is_empty(self):
    if self.head.left:
      return False
    else:
      return True
  def top(self):
    #查询目前队列中最早入队的元素
    if self.head.left:
      return self.head.left.value
    else:
      raise LookupError('queue is empty!')

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

Python 相关文章推荐
Python 文件操作实现代码
Oct 07 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
Python入门_浅谈for循环、while循环
May 16 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
python正则表达式re之compile函数解析
Oct 25 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python3.7中安装openCV库的方法
Jul 11 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
python调用函数、类和文件操作简单实例总结
Nov 29 #Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 #Python
python实现把两个二维array叠加成三维array示例
Nov 29 #Python
python的time模块和datetime模块实例解析
Nov 29 #Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 #Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 #Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 #Python
You might like
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
php银联网页支付实现方法
2015/03/04 PHP
php文件缓存方法总结
2016/03/16 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python将数组n等分的实例
2019/12/02 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
个人找工作自荐信格式
2013/09/21 职场文书
优秀毕业大学生推荐信
2013/11/13 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
Python提取PDF指定内容并生成新文件
2021/06/09 Python