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 20 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python+opencv轮廓检测代码解析
Jan 05 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
Python传递参数的多种方式(小结)
Sep 18 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
python基于tkinter制作下班倒计时工具
Apr 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
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
javascript 跳转代码集合
2009/12/03 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
js post提交调用方法
2014/02/12 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python与Redis的连接教程
2015/04/22 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
利用python画出折线图
2018/07/26 Python
Django 路由控制的实现代码
2018/11/08 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python列表元素常见操作简单示例
2019/10/25 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
中国跨境电商:Tomtop
2017/03/16 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
好的自荐信包括什么内容
2013/11/07 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
先进党员事迹材料
2014/12/24 职场文书
2015教师年度考核评语
2015/03/25 职场文书
学术会议通知
2015/04/15 职场文书
离婚协议书范文2016
2016/03/18 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript