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 (1)
Oct 31 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
Python3多线程操作简单示例
May 22 Python
使用Python进行目录的对比方法
Nov 01 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
用python爬取租房网站信息的代码
Dec 14 Python
Python with用法:自动关闭文件进程
Jul 10 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
js函数调用的方式
2014/05/06 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python 网络编程详解及简单实例
2017/04/25 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python算法题 链表反转详解
2019/07/02 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
师范毕业生个人求职信
2013/12/09 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
就业协议书范本
2014/10/08 职场文书
承诺函范文
2015/01/21 职场文书
世界红十字日活动总结
2015/02/10 职场文书
医生辞职信范文
2015/03/02 职场文书
2015年预算员工作总结
2015/05/14 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android