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解决字典中的值是列表问题的方法
Mar 04 Python
python获取从命令行输入数字的方法
Apr 29 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
使用python3+xlrd解析Excel的实例
May 04 Python
python 文件转成16进制数组的实例
Jul 09 Python
python爬虫之urllib3的使用示例
Jul 09 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
Python数据类型之List列表实例详解
May 08 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 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通过header实现文本文件下载的代码
2010/08/08 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
详解Vue之事件处理
2020/07/10 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
基于Python闭包及其作用域详解
2017/08/28 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
python dict乱码如何解决
2020/06/07 Python
python 获取计算机的网卡信息
2021/02/18 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
司机检讨书
2014/02/13 职场文书
暑期研修感言
2014/02/17 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
政府四风问题整改措施
2014/10/04 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
模范教师材料大全
2014/12/16 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书