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中的五种异常处理机制介绍
Sep 02 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
python导入时小括号大作用
Jan 10 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python中csv文件的若干读写方法小结
Jul 04 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
Python常用GUI框架原理解析汇总
Dec 07 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
解析左右值无限分类的实现算法
2013/06/20 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
python 命令行传入参数实现解析
2019/08/30 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
酒店管理自荐信
2013/10/23 职场文书
应届生财务管理求职信
2013/11/06 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
企业文化标语口号
2014/06/09 职场文书
工作检讨书500字
2014/10/19 职场文书
大学生党性分析材料
2014/12/19 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
学校教代会开幕词
2016/03/04 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
python实现批量移动文件
2021/04/05 Python