Python 实现数据结构-循环队列的操作方法
作者:浩然haoran 时间:2022-10-13 23:15:00
今天我们来到了循环队列这一节,之前的文章中,我介绍过了用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 实现数据结构-循环队列的操作方法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/dongyangblog/p/11198456.html
标签:python,数据结构,循环队列
0
投稿
猜你喜欢
python通过函数属性实现全局变量的方法
2023-08-25 04:54:20
opencv实现车牌识别
2023-08-10 01:59:38
Python抓取通过Ajax加载数据的示例
2023-12-09 21:28:38
JavaScript继承模式粗探
2024-04-23 09:25:20
五个有趣的Python整蛊小程序合集
2022-10-27 12:34:10
Python实现钉钉发送报警消息的方法
2022-11-18 06:06:44
Python新手学习函数默认参数设置
2021-08-18 03:50:35
Mysql中一千万条数据怎么快速查询
2024-01-15 06:57:05
Django Form 实时从数据库中获取数据的操作方法
2024-01-23 14:35:54
用Python编写一个简单的CS架构后门的方法
2021-08-07 00:15:58
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2022-05-12 03:35:29
pandas中DataFrame修改index、columns名的方法示例
2022-02-14 15:42:37
BootstrapValidator超详细教程(推荐)
2024-04-10 13:53:24
Python实现解析参数的三种方法详解
2023-09-13 21:46:25
详解MySql自连接,外连接,内连接 ,左连接,右连接
2024-01-25 05:40:52
Python 字符串转换为整形和浮点类型的方法
2021-09-02 00:09:31
Python函数命名空间,作用域LEGB及Global详析
2022-09-18 18:14:16
jupyter notebook实现显示行号
2022-11-20 03:51:40
适合各种浏览器的js拖动层
2007-10-22 22:43:00
python脚本开机自启的实现方法
2023-10-04 17:07:15