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 json encode datetime类型
Dec 28 Python
python模拟登陆Tom邮箱示例分享
Jan 13 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
Django组件之cookie与session的使用方法
Jan 10 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python 实现集合Set的示例
Dec 21 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
python实战之一步一步教你绘制小猪佩奇
Apr 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/04/12 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
自写的一个jQuery圆角插件
2010/10/26 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
探究python中open函数的使用
2016/03/01 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python requests库用法实例详解
2018/08/14 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python 实现客户端与服务端的通信
2020/12/23 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
八项规定整改方案
2014/02/21 职场文书
法人代表证明书
2014/09/18 职场文书
学校党员干部承诺书
2015/05/04 职场文书
导游词之任弼时故居
2020/01/07 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers