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的Django框架使用的一些实用建议
Apr 03 Python
python实现bucket排序算法实例分析
May 04 Python
Python复数属性和方法运算操作示例
Jul 21 Python
python的re正则表达式实例代码
Jan 24 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
python socket网络编程之粘包问题详解
Apr 28 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
我就是这样学习Python中的列表
Jun 02 Python
详解Python流程控制语句
Oct 28 Python
python 元组和列表的区别
Dec 30 Python
python 实现图片批量压缩的示例
Dec 18 Python
python实现A*寻路算法
Jun 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP 字符串分割和比较
2009/10/06 PHP
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
python使用range函数计算一组数和的方法
2015/05/07 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
python的debug实用工具 pdb详解
2019/07/12 Python
如何在python中判断变量的类型
2020/07/29 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
模范家庭事迹材料
2014/02/10 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
大型活动组织方案
2014/05/10 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
村委会贫困证明范文
2014/09/21 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
健康状况证明书
2014/11/26 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
朋友聚会开场白
2015/06/01 职场文书
国庆阅兵观后感
2015/06/15 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang