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全局变量操作详解
Apr 14 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
python字符串格式化方式解析
Oct 19 Python
pytorch 实现打印模型的参数值
Dec 30 Python
Python面向对象封装操作案例详解
Dec 31 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 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中常用字符串处理代码片段整理
2011/11/07 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
详解php中 === 的使用
2016/10/24 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
解析js原生方法创建表格效率测试
2013/07/08 Javascript
JavaScript 数组详解
2013/10/10 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
jQuery事件对象总结
2016/10/17 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
省三好学生申请材料
2014/01/22 职场文书
元旦晚会策划方案
2014/02/18 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
大跃进口号
2014/06/16 职场文书
合作协议书范本
2014/10/25 职场文书
五年级学生期末评语
2014/12/26 职场文书
给医院的感谢信
2015/01/21 职场文书
公司人事任命通知
2015/04/20 职场文书
幽默导游词开场白
2015/05/29 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
导游词之天津盘山
2019/11/01 职场文书
Python源码解析之List
2021/05/21 Python