[快学Python3]数据结构-队列
时间:2022-05-07
本文章向大家介绍[快学Python3]数据结构-队列,主要内容包括代码实现、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
概述
什么是队列,简单而言:先进先出。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。
在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。
因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
代码实现
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
class Queue:
def __init__(self, size=30):
# 初始化队列长度
self.size = size
# 初始化队列列表
self.queue = []
# 初始化队列前端、后端位置
self.front = 0
self.rear = -1
# 判断队列是否为空
def is_empty(self):
return self.rear == 0
# 判断队列是否满了
def is_full(self):
res = False
if (self.rear - self.front + 1) == self.size:
res = True
return res
# 入队
def add(self, obj):
if self.is_full():
raise Exception("我去,队列满了……")
else:
self.queue.append(obj)
self.rear += 1
# 出队
def delete(self):
if self.is_empty():
raise Exception("队列是空的,出不了了……")
else:
self.rear -= 1
self.queue.pop(0)
# 队列头元素
def first(self):
if self.is_empty():
raise Exception("队列是空的啦……")
else:
return self.queue[self.front]
# 队列尾元素
def last(self):
if self.is_empty():
raise Exception("队列是空的啦……")
else:
return self.queue[self.rear]
# 打印队列
def show(self):
print(self.queue)
if __name__ == "__main__":
print("队列实现示例")
# 初始化长度为5的队列
queue = Queue(5)
# 先把1-5的数据入队
for index in range(1, 6):
queue.add(index)
# 打印下队列数据
queue.show()
# 打印下队列头
print(queue.first())
# 打印下队列尾
print(queue.last())
# 出个队试试
queue.delete()
# 打印下队列看下是否出队了
queue.show()
# 再出个队试试
queue.delete()
# 打印下队列看下是否出队了
queue.show()
小结
队列的关键点:
- 先进先出
- 注意溢出的处理
- gsoap开发webservice
- [Go 语言社区]测试模块之---utf8例子
- org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
- JBPM4.4(2)-state结点和decision结点
- [Go 语言社区] Golang架构底层---日志函数
- [Go 语言社区]服务器游戏用户登陆数据读取函数
- 设计Go API的管道使用原则
- Goroutine背后的系统知识
- 从零到 Go:Google感恩节火鸡涂鸦开发纪实
- JBPM4.4(1)-简单工程的搭建
- 未绑定元素“mx:Panel”的前缀“mx”
- [Go 语言社区] Golang架构底层函数图片保存-原创
- [Go 语言社区]Golang架构--服务器与客户端自定义传输规则--原创
- Go语言 -浮点数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- iOS 性能优化实践:头条抖音如何实现 OOM 崩溃率下降50%+
- PHP join()函数用法与实例讲解
- Laravel框架实现的使用smtp发送邮件功能示例
- 浅谈PHP无限极分类原理
- 浅谈PHP各环境下的伪静态配置
- 浅谈php的TS和NTS的区别
- 详解用Python调用百度地图正/逆地理编码API
- python如何使用代码运行助手
- keras topN显示,自编写代码案例
- PHP实现的杨辉三角求解算法分析
- PHP levenshtein()函数用法讲解
- PHP DB 数据库连接类定义与用法示例
- PHP添加PNG图片背景透明水印操作类定义与用法示例
- 浅谈PHPANALYSIS提取关键字
- 详解PHP队列的实现