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 Queue模块详解
Nov 30 Python
Python中返回字典键的值的values()方法使用
May 22 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python实现学校管理系统
Jan 11 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
详解Python 解压缩文件
Apr 09 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
用python制作个音乐下载器
Jan 30 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
Pandas加速代码之避免使用for循环
May 30 Python
python flask开发的简单基金查询工具
Jun 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之第六天
2006/10/09 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
python使用turtle绘制分形树
2018/06/22 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
高三上学期学习自我评价
2014/04/23 职场文书
运动会演讲稿100字
2014/08/25 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android
分享python函数常见关键字
2022/04/26 Python