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 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
Unicode和Python的中文处理
Mar 19 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
Django框架验证码用法实例分析
May 10 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
Python3的进程和线程你了解吗
Mar 16 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单例模式实现(对象只被创建一次)
2012/12/05 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
Vue Router的手写实现方法实现
2020/03/02 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python全局变量操作详解
2015/04/14 Python
python中zip()方法应用实例分析
2016/04/16 Python
python解析基于xml格式的日志文件
2017/02/25 Python
python Pygame的具体使用讲解
2017/11/03 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
python中for in的用法详解
2020/04/17 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
学生就业推荐信
2013/11/13 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
美丽人生观后感
2015/06/03 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python