环形队列(Python代码实现)
环形队列是是在普通队列上进行的变化,本质和普通单向队列相同,都是队尾进队,队首出队。环形队列与普通队列的区别在于它能够循环利用空间,元素从队首出队后释放的空间能够被重复利用。
主要特点:
- 当队尾指针front = Maxsize + 1时,在前进一个位置就到0
- 队首指针前进1:front = (front + 1) % Maxsize
- 队尾指针前进1:rear = (rear + 1) % Maxsize
- 队空条件:rear == front
- 队满条件:(rear + 1) % Maxsize == front (注:此处不能用队首和队尾指针一致判断)
实现代码:
class CircleQueue(object):"""环形队列"""def __init__(self, size=10):self.queue = [0 for i in range(size)]self.size = sizeself.rear = 0 # 队尾指针self.front = 0 # 队首指针def enqueue(self, item):"""进队"""if not self.is_full():self.rear = (self.rear + 1) % self.size # 队尾指针前移self.queue[self.rear] = itemelse:print("队列已满!")def dequeue(self):"""出队"""if not self.is_empty():self.front = (self.front + 1) % self.size # 队首指针前移return self.queue[self.front]else:print("队列为空!")def is_empty(self):"""判断环形队列是否为空"""return self.front == self.reardef is_full(self):"""判断环形队列是否已满"""return (self.rear + 1) % self.size == self.frontdef travel(self):"""遍历队列元素"""if not self.is_empty():for i in range(self.front, self.rear + 1):print(self.queue[i], end="")print()else:print("队列为空!")if __name__ == '__main__':queue = CircleQueue()print(queue.is_empty())queue.enqueue(1)queue.enqueue(2)queue.enqueue(3)queue.enqueue(4)queue.dequeue()queue.travel()queue.enqueue(5)queue.travel()print(queue.is_empty())print(queue.is_full())
环形队列(Python代码实现)相关推荐
- (数据结构与算法)数组模拟队列和环形队列
文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...
- 【数据结构】队列、环形队列
目录 1.队列的概念及结构 2.队列的实现 3.队列的相关实现函数与源代码 3.1初始化队列 3.2 队尾入队列 3.3 队头出队列 3.4获取队列头部元素 3.5 获取队列队尾元素 3.6 获取队列 ...
- 队列——数组实现环形队列
[目的] 数组实现环形队列 [思路分析] 1. front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素 front 的初始值 ...
- Python数据结构之环形队列
Python数据结构之环形队列 环形队列:主要解决假溢出现象: 公式: rear = front = -1 添加数据 rear = (rear+1) % MAX_SIZE 删除数据 front = ( ...
- 基于Python实现环形队列高效定时器
定时器Python实现代码 import time import redis import multiprocessingclass Base:"""redis配置&qu ...
- 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。
关于zeromq的创建,绑定本地,和绑定其他客户端的方法. 网上一大堆关于zmq的通信模式的介绍,包括三种类型,具体我就不在描述. 但是他们给的demo,都是创建本地作为server服务端,也作为cl ...
- python实现环形队列
0队列,是一种基础数据结构,遵循的原则是先进先出,就和排队一样,排在队伍前面的人先出来. class arrayQueen:# 数组最大容量maxSize = 0# 队列的头部front = 0# 队 ...
- ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...
- 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
最新文章
- Bootstrap笔记
- Java常用的设计模式总结
- 运用多种知识点实现一个综合小游戏
- wordcloud用来制作中文词云
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。...
- 计算机视觉牛人(转载)(最早在自动化所论坛上发现的)
- linux设置nexus开机自启动_CentOS7配置nexus开机自启动
- 文本的表示-词嵌入(word embedding)
- 深度学习入门笔记:Day-10
- CentOS 7下彻底卸载MySQL数据库
- docker 开启服务
- 计算机网络学习笔记(22. Web应用概述)
- Android如何实现汉字手写输入法(带中文自动识别提示)
- 多源信息融合与多视角学习
- 未來用工新趨勢_2019年社会化用工成新趋势
- 个性化网站建设的一般流程
- FPGA:ov7725摄像头通过VGA/HDMI显示RGB565格式的图像
- 简易网页(HTML)
- aoc显示器2k165hz测试
- ios15.6RC-15.7.1系统降级iOS14,适用于checkm8机型