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的struct模块中进行数据格式转换的方法
Jun 17 Python
Python的多态性实例分析
Jul 07 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python实现京东秒杀功能
Jul 30 Python
详解python:time模块用法
Mar 25 Python
Python 如何提高元组的可读性
Aug 26 Python
Python数据存储之 h5py详解
Dec 26 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
opencv读取视频并保存图像的方法
Jun 04 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php实现算术验证码功能
2018/12/05 PHP
解密效果
2006/06/23 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python 备份程序代码实现
2017/03/06 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
python中spy++的使用超详细教程
2021/01/29 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
厨师长岗位职责
2014/03/02 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2016寒假假期总结
2015/10/10 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
Ajax实现异步加载数据
2021/11/17 Javascript