Python实现队列数据结构

队列是一种应用广泛的数据结构,是一种只允许在一端进行插入操作,另一端进行删除操作的线性表,具有先进先出(First-In-First-Out)的原则。队列的两种主要操作是:向队列中插入新元素和删除队列中的元素。插入操作也叫做入队,删除操作也叫做出队。入队操作在队尾插入新元素,出队操作删除队头的元素。

Python中并没有提供关于队列函数,所以一般把列表当做队列来使用,下面通过类定义队列中的常用操作:

class queue:
    def __init__(self):
        self.items = []

    def isqueueEmpty(self):
        return self.items == []

    def enqueue(self, item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def queuesize(self):
        return len(self.items)

queue() 定义一个空队列,无参数,返回值是空队列。 isqueueEmpty() 检测队列是否为空。无参数,返回布尔值。 enqueue() 在队列尾部加入一个数据项,参数是数据项,无返回值。 dequeue() 删除队列头部的数据项,不需要参数,返回值是被删除的数据,队列本身有变化。 queuesize() 返回队列数据项的数量。无参数,返回一个整数。

测试代码:

q=queue()
q.enqueue('first')
q.enqueue('second')
y=q.isqueueEmpty()
print('是否为空:',y)
print('队列元素个数:',q.queuesize())
print('出队:',q.dequeue())
print('出队:',q.dequeue())
print('是否为空:',q.isqueueEmpty())

打印结果: 是否为空: False 队列元素个数: 2 出队: first 出队: second 是否为空: True

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 源码分析

HashSet 源码分析

HashSet 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在...

2994
来自专栏大史住在大前端

野生前端的数据结构基础练习(6)——集合

3.为Set类增加一个higher(element)方法,该方法返回比传入元素大的元素中最小的一个,并写一段代码来测试该功能。

823
来自专栏MyBlog

Effective.Java 读书笔记(11)关于clone方法

说到clone方法,我们来提一提Cloneable这个接口,这个接口是用来作为一种标记某对象允许被clone的一种混合接口,可是不幸运的是,这个接口并没能起到该...

832
来自专栏我是攻城师

理解Java队列接口Queue的设计

Queue接口不属于Java并发包下面的类,它是java.util下面的一个接口,虽然这个接口跟并发没有直接关系,但是它抽象和定义了在Java里面队列的通用方法...

983
来自专栏小灰灰

JDK容器学习之LinkedHashMap (一):底层存储结构分析

LinkedHashMap 底层存储结构分析 HashMap 是无序的kv键值对容器,TreeMap 则是根据key进行排序的kv键值对容器,而LinkedH...

1795
来自专栏章鱼的慢慢技术路

Go指南练习_Reader

Read 用数据填充给定的字节切片并返回填充的字节数和错误值。在遇到数据流的结尾时,它会返回一个 io.EOF 错误。

1094
来自专栏博岩Java大讲堂

Java集合--非阻塞队列(ConcurrentLinkedQueue实现原理)

4877
来自专栏轮子工厂

深入理解Java中的List、Set与Map集合

534
来自专栏程序生活

Leetcode-Easy 101. Symmetric Tree

101. Symmetric Tree 描述: 判断一个颗二叉树是否左右对称 ? 思路: 将二叉树的左右节点对放在的队列里,然后出队,判断节...

3277
来自专栏静默虚空的博客

[Java IO]06_JSON操作

6.1 JSON 知识背景 6.1.1 JSON 简介 JSON: JavaScript Object Notation(JavaScript 对象表示法) J...

1808

扫码关注云+社区