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函数式编程
Jun 09 Python
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
Python动态加载模块的3种方法
Nov 22 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python实现捕获异常发生的文件和具体行数
Apr 25 Python
python实时监控logstash日志代码
Apr 27 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
PHP令牌 Token改进版
2008/07/18 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
《javascript少儿编程》location术语总结
2018/05/27 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
python线程池的实现实例
2013/11/18 Python
python调用新浪微博API项目实践
2014/07/28 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
如何用python批量调整视频声音
2020/12/22 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
应届生服务员求职信
2013/10/31 职场文书
园林设计师自荐信
2013/11/18 职场文书
毕业生自我鉴定
2013/12/04 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
公司委托书格式范本
2014/09/16 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby