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写asp详细讲解
Dec 16 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
python matlibplot绘制3D图形
Jul 02 Python
python安装twisted的问题解析
Aug 21 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python hash每次调用结果不同的原因
Nov 21 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
python可以用哪些数据库
Jun 22 Python
关于python中导入文件到list的问题
Oct 31 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
Python字节单位转换(将字节转换为K M G T)
Mar 02 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
Javascript window对象详解
2014/11/12 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
详解python 中in 的 用法
2019/12/12 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
企事业单位求职者的自我评价
2013/12/28 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
Java输出Hello World完美过程解析
2021/06/13 Java/Android
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python