环形队列是是在普通队列上进行的变化,本质和普通单向队列相同,都是队尾进队,队首出队。环形队列与普通队列的区别在于它能够循环利用空间,元素从队首出队后释放的空间能够被重复利用。

主要特点:

  • 当队尾指针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. 【数据结构】队列、环形队列

    目录 1.队列的概念及结构 2.队列的实现 3.队列的相关实现函数与源代码 3.1初始化队列 3.2 队尾入队列 3.3 队头出队列 3.4获取队列头部元素 3.5 获取队列队尾元素 3.6 获取队列 ...

  3. 队列——数组实现环形队列

    [目的] 数组实现环形队列 [思路分析] 1.  front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素 front 的初始值 ...

  4. Python数据结构之环形队列

    Python数据结构之环形队列 环形队列:主要解决假溢出现象: 公式: rear = front = -1 添加数据 rear = (rear+1) % MAX_SIZE 删除数据 front = ( ...

  5. 基于Python实现环形队列高效定时器

    定时器Python实现代码 import time import redis import multiprocessingclass Base:"""redis配置&qu ...

  6. 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。

    关于zeromq的创建,绑定本地,和绑定其他客户端的方法. 网上一大堆关于zmq的通信模式的介绍,包括三种类型,具体我就不在描述. 但是他们给的demo,都是创建本地作为server服务端,也作为cl ...

  7. python实现环形队列

    0队列,是一种基础数据结构,遵循的原则是先进先出,就和排队一样,排在队伍前面的人先出来. class arrayQueen:# 数组最大容量maxSize = 0# 队列的头部front = 0# 队 ...

  8. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...

  9. 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

最新文章

  1. Bootstrap笔记
  2. Java常用的设计模式总结
  3. 运用多种知识点实现一个综合小游戏
  4. wordcloud用来制作中文词云
  5. c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。...
  6. 计算机视觉牛人(转载)(最早在自动化所论坛上发现的)
  7. linux设置nexus开机自启动_CentOS7配置nexus开机自启动
  8. 文本的表示-词嵌入(word embedding)
  9. 深度学习入门笔记:Day-10
  10. CentOS 7下彻底卸载MySQL数据库
  11. docker 开启服务
  12. 计算机网络学习笔记(22. Web应用概述)
  13. Android如何实现汉字手写输入法(带中文自动识别提示)
  14. 多源信息融合与多视角学习
  15. 未來用工新趨勢_2019年社会化用工成新趋势
  16. 个性化网站建设的一般流程
  17. FPGA:ov7725摄像头通过VGA/HDMI显示RGB565格式的图像
  18. 简易网页(HTML)
  19. aoc显示器2k165hz测试
  20. ios15.6RC-15.7.1系统降级iOS14,适用于checkm8机型

热门文章

  1. Samba服务概述、配置、及其搭建
  2. C# webBrowser 清空浏览器缓存
  3. 在OpenEuler 中安装和配置 SVN Server
  4. SQL Sever 查询表结构命令
  5. vue数组更新不渲染页面
  6. 计算机windows7更新失败,Win7自动更新失败开不了机怎么办?
  7. 关于exists 的使用
  8. Senior Course Of Elasticsearch
  9. word中磅和mm的换算(转载)
  10. 特长使用计算机怎么得体写,高考报名特长一栏应该怎么填写