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 11 Python
python格式化字符串实例总结
Sep 28 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
python中pass语句用法实例分析
Apr 30 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
python版飞机大战代码分享
Nov 20 Python
python识别验证码图片实例详解
Feb 17 Python
Python多线程thread及模块使用实例
Apr 28 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
jquery radio 操作代码
2011/03/16 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python 实现超级玛丽游戏
2020/11/25 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
上班早退检讨书
2014/01/09 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
2015年考研复习计划
2015/01/19 职场文书
芙蓉镇观后感
2015/06/10 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL