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中的控制流语句的知识点
Apr 14 Python
浅谈Python数据类型之间的转换
Jun 08 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python/golang实现循环链表的示例代码
Sep 14 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Python编程super应用场景及示例解析
Oct 05 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类
2006/11/25 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
node.js require() 源码解读
2015/12/13 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
介绍Python中的文档测试模块
2015/04/28 Python
Python实现把数字转换成中文
2015/06/29 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
Python如何计算语句执行时间
2019/11/22 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
Ajax的工作原理
2015/12/04 面试题
财务主管自我鉴定
2014/01/17 职场文书
大专生自我评价
2014/01/28 职场文书
高中军训感言600字
2014/03/11 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python