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中sleep函数用法实例分析
Apr 29 Python
windows 下python+numpy安装实用教程
Dec 23 Python
python取代netcat过程分析
Feb 10 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
Python lambda表达式用法实例分析
Dec 25 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
pytorch之ImageFolder使用详解
Jan 06 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 Python
用Python可视化新冠疫情数据
Jan 18 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防注入类实例
2014/12/05 PHP
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python字符串格式化
2015/06/15 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python对象转换为json的方法步骤
2019/04/25 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
资深地理教师自我评价
2013/09/21 职场文书
车间组长岗位职责
2013/12/20 职场文书
称象教学反思
2014/02/03 职场文书
交通事故协议书
2014/04/15 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
美化环境标语
2014/06/20 职场文书
临床专业自荐信
2014/06/22 职场文书
员工工作自我评价
2014/09/26 职场文书
工程部经理岗位职责
2015/02/02 职场文书
简历自荐信范文
2015/03/09 职场文书
食品安全责任书范本
2015/05/09 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers
python3中apply函数和lambda函数的使用详解
2022/02/28 Python