Python 实现数据结构-循环队列的操作方法


Posted in Python onJuly 17, 2019

今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法。

但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删除列表的第一个元素,那么在它之后的所有元素都要进行移动。所以当列表特别长的时候,这个代价就比较明显了。我们本文介绍的循环队列可以避免这个问题,同样我们上篇文章提到的用链表实现的方法也可以避免。

下面,我们来介绍循环队列。

循坏队列

循环队列,就是将普通的队列首尾连接起来, 形成一个环状,并分别设置首尾指针,用来指明队列的头和尾。每当我们插入一个元素,尾指针就向后移动一位,当然,在这里我们队列的最大长度是提前定义好的,当我们弹出一个元素,头指针就向后移动一位。

这样,列表中就不存在删除操作,只有修改操作,从而避免了删除前面节点造成的代价大的问题。

好,话不多说,我们用代码来实现一下

class Loopqueue:
 def __init__(self, length):
  self.head = 0
  self.tail = 0
  self.maxSize = length
  self.cnt = 0
  self.__list = [None]*length

这里同样,我们定义一个队列类,在实例化循环队列的时候,要求指定队列的大小,除了首尾指针以及队列最大长度之外,我们还声明一个表示队列当前长度的属性cnt。

接下来我们给队列增加一些操作:

判空

def isEmpty(self):
  return self.cnt == 0

判满

def isFull(self):
  return self.cnt == self.maxSize

添加元素

def push(self, data):
  if self.isFull():
   return False
  if self.isEmpty():
   self.__list[0] = data
   self.head = 0
   self.tail = 0
   self.cnt = 1
   return True
  self.tail = (self.tail+1)%self.maxSize
  self.cnt += 1
  self.__list[self.tail] = data
  return True

弹出元素

def pop(self):
  if self.isEmpty():
   return False
  data = self.__list[self.head]
  self.head = (self.head+1)%self.maxSize
  self.cnt -= 1
  return data

清空队列

def clear(self):
  self.head = 0
  self.tail = 0
  self.cnt = 0
  return True

定义len和print函数

def __len__(self):
  return self.cnt

 def __str__(self):
  s = ''
  for i in range(self.cnt):
   index = (i + self.head) % self.maxSize
   s += str(self.__list[index])+' '
  return s

OK,我们的循环队列类就定义好了,如果你看过介绍队列的文章,就会发现循环队列和普通队列的操作在逻辑上还是有一些相似的。

总结

以上所述是小编给大家介绍的Python 实现数据结构-循环队列的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python处理csv数据的方法
Mar 11 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
浅析Python四种数据类型
Sep 26 Python
Django 路由控制的实现代码
Nov 08 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
用Python解数独的方法示例
Oct 24 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 #Python
python中dict使用方法详解
Jul 17 #Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 #Python
python对矩阵进行转置的2种处理方法
Jul 17 #Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 #Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 #Python
python中update的基本使用方法详解
Jul 17 #Python
You might like
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
python命令行参数sys.argv使用示例
2014/01/28 Python
python实现折半查找和归并排序算法
2017/04/14 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
教师自我鉴定范文
2013/11/10 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
美术教师个人工作总结
2015/02/06 职场文书
项目安全员岗位职责
2015/02/15 职场文书
面试复试通知单
2015/04/24 职场文书
匿名信格式范文
2015/05/27 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书