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中的ceil()方法使用教程
May 14 Python
Python编程之属性和方法实例详解
May 19 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
python实现多线程的两种方式
May 22 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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
php2html php生成静态页函数
2008/12/08 PHP
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
新手入门常用代码集锦
2007/01/11 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
3分钟学会一个Python小技巧
2018/11/23 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python合并多个excel文件的示例
2020/09/23 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
演讲稿怎么写
2014/01/07 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年行政部工作总结
2014/11/19 职场文书
风之谷观后感
2015/06/11 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
公司备用金管理制度
2015/08/04 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android