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抓取某汽车网数据解析html存入excel示例
Dec 04 Python
Python中的装饰器用法详解
Jan 14 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
Python中常用的8种字符串操作方法
May 06 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
TensorFlow tensor的拼接实例
Jan 19 Python
python 函数中的参数类型
Feb 11 Python
Pandas DataFrame求差集的示例代码
Dec 13 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
Windows下的PHP5.0详解
2006/11/18 PHP
php xml-rpc远程调用
2008/12/19 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
在Python中使用正则表达式的方法
2015/08/13 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python生成excel的实例代码
2017/11/08 Python
python之文件读取一行一行的方法
2018/07/12 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
python3爬虫怎样构建请求header
2018/12/23 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
跳槽求职信范文
2014/05/26 职场文书
新闻报道策划方案
2014/06/11 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
优秀教师先进材料
2014/12/16 职场文书
个人培训总结
2015/03/05 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2015年重阳节主持词
2015/07/04 职场文书