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中对元组和列表按条件进行排序的方法示例
Nov 10 Python
python3 读写文件换行符的方法
Apr 09 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
什么是Python包的循环导入
Sep 08 Python
Linux系统下升级pip的完整步骤
Jan 31 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
smarty简单入门实例
2014/11/28 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
JsChart组件使用详解
2018/03/04 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
详解python和matlab的优势与区别
2019/06/28 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
运行Python编写的程序方法实例
2020/10/21 Python
python Cartopy的基础使用详解
2020/11/01 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
理财学专业自荐书
2014/06/28 职场文书
高三英语教学计划
2015/01/23 职场文书
创建文明城市倡议书
2015/04/28 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
golang 实用库gotable的具体使用
2021/07/01 Golang
Apache自带的ab压力测试工具的实现
2022/07/23 Servers