0队列,是一种基础数据结构,遵循的原则是先进先出,就和排队一样,排在队伍前面的人先出来。

class arrayQueen:# 数组最大容量maxSize = 0# 队列的头部front = 0# 队列的尾部rear = 0def __init__(self, size):self.maxSize = size# 这是python中定义一维数组长度的方式,这里定义数组长度self.arr = [0 for x in range(0, size)]z

这里的第一个参数,maxsize,是数组的最大长度,front,指向队列的头部,rear,指向队列的尾部。这个是非常重要的参数,因为在数组元素数量发生变化时,front或者rear的数值也会发生改变。

# 判断队列是否为空
def is_empty(self):return self.front == self.rear

当front和rear相等时,队列为空,初始时二者都为0,但二者相等且不为0的情况也是有可能的。

# 判断队列是否满了
def is_full(self):return (self.rear + 1) % self.maxSize == self.front

可以看到,这里返回的是一个判断, (self.rear + 1) % self.maxSize == self.front。这里为什么要用这个取模呢?这个1又是什么情况?

实际上,这个队列中有一个位置是不存放元素的,而是存放的rear,打个比方,如果front的数值为1,什么情况下队列满了呢?答案是当rear=0的时候,队列是满的。

def add_queue(self, data):# 队列满了不能加入数据if self.is_full():print('队列满了。。。。')return# 直接将数据加入,然后将rear后移一位self.arr[self.rear] = data# 队尾向后移动一位,当移动到最后一位时,rear回到初始位置,整个过程中,数组内的数据不会移动,而是队头和队尾的数值发生改变# 也就是说,在这种情况下,rear的值是有可能小
于front的self.rear = (self.rear + 1) % self.maxSize

添加数据时,队尾的数值移动,自然,在提取数据时,队头的数值移动。

# 获取队列的数据,出队列
def get_queue(self):# 判断队列是否为空if self.is_empty():print('队列为空.....')return 0# 1.先把front对应的值保存给一个临时变量# 2.将front取模# 3.将保存的临时变量返回val_m = self.arr[self.front]self.front = (self.front + 1) % self.maxSizereturn val_m

展示队列中的有效数据

# 显示队列内有效数据的个数
def size(self):return (self.rear + self.maxSize - self.front) % self.maxSize

可以看到,当rear和front 相等的时候,就是maxSize%maxSize,有效数据为0.而当rear和front

# 显示队列的所有数据
def show_queue(self):if self.is_empty():print('队列为空.....')returnfor i in range(self.front, self.front + self.size()):print(self.arr[i % self.maxSize])

这里的range从front开始,到front+size结束,因为front的值会发生改变,那么数组中有效数据的个数就是需要遍历的次数。i%self.maxSize则是考虑到数组的下标是否越界。

# 显示队列的头数据
def head_queue(self):if self.is_empty():print('队列为空.....')return 0return self.arr[self.front]

获取队列头

测试一下

arr = arrayQueen(5)
print('环形队列启动')
loop = True
while loop:print('s(show):显示队列')print('e(show):退出程序')print('a(add):添加数据')print('g(get):取出数据')print('h(head):显示队头')val = input()if val == 's':arr.show_queue()elif val == 'e':loop = Falseelif val == 'a':nums = input('输入一个数字:')arr.add_queue(nums)elif val == 'g':print(arr.get_queue())elif val == 'h':print(arr.head_queue())else:print('不符合规范,请重试')
print('程序退出')

自行测试

python实现环形队列相关推荐

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

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

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

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

  3. 环形队列(Python代码实现)

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

  4. 约瑟夫斯问题,十步杀一人(环形队列)

    Python实现环性队列,解决约瑟夫斯站位问题 弗拉维奥·约瑟夫斯是公元1世纪著名的历史学家.相传,约瑟夫斯当年和39个战友在山洞中对抗罗马军队.眼看着即将失败,他们决定舍生取义.于是,他们围成一圈, ...

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

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

  6. 第七周实践项目2.3 顺序环形队列

    下图是数据存储结构设计及各种操作实现的要点: /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2.3- *作 者 ...

  7. 单片机实现环形队列_单片机模块化程序: 难道有环形队列串口发送数据就万事大吉了吗...

    1.问个问题,下面程序有没有BUG数组 2.环形队列虽然解决了一开始的中断发送数据覆盖问题,可是呢却引入了新的问题函数 3.而后看看中断发送测试 4.想没想明白是什么问题spa 5.发送数据1 和发送 ...

  8. 每日一博 - 使用环形队列实现高效的延时消息

    文章目录 Pre 方案A 方案B 总结 Pre 来个场景: 24小时后将未进行某个Action的业务,执行另外一个动作. 比如 24小时未付款的订单,取消. 你可能会说 方案A 来个定时呗 ,每隔半小 ...

  9. (数据结构与算法)数组模拟队列和环形队列

    文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...

最新文章

  1. python微信库wxpy_使用wxpy这个基于python实现的微信工具库的一些常见问题
  2. Java Scoket之java.io.EOFException解决方案
  3. 【caffe解读】 caffe从数学公式到代码实现2-基础函数类
  4. 电商三巨头交成绩单,这次拼多多输了吗?
  5. LeetCode之Nim Game
  6. android添加商品到购物车,Android使用动画动态添加商品进购物车
  7. 来自前苹果高管Heidi Roizen的经验之谈
  8. Bootstrap3 编译版本的文件结构
  9. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)
  10. html页面如何复用,html代码用js实现复用
  11. 查看Unix系统是32位还是64位
  12. mysql innodb count 优化_MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
  13. 娱乐小工具微信小程序源码下载/支持多种流量主
  14. 中介兴风 深圳楼市起浪
  15. 点割集和边割集的理解
  16. html map插件,jQuery谷歌地图插件maplace.js
  17. 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法
  18. 数据分析------统计学----小样本容量置信区间例题
  19. requests和正则re的使用抓取某小说文本(附带源码)
  20. CGAL 创建DTM(数字地形模型)

热门文章

  1. 网络基础学习系列三http
  2. 解决报错404“Not Found”
  3. 使用frida破解native层算法
  4. c莫比乌斯函数_莫比乌斯函数总结
  5. ExecuteNonQuery、ExecuteScalar、Dataset、ExecuteReader的不同意思和用法
  6. 列车调度 (25 分)
  7. android编码:国标色彩标准名称和色值
  8. vue中请求方式总结
  9. 10-205 在顾客表中查询顾客编号,公司名称和所在城市这三项内容
  10. JQuery实现标签的删除与添加