数据结构链表之队列,Python3实现——7

数据结构链表之队列

队列概述

  • 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取

在这里插入图片描述

队列可以使用顺序表(Python中列表)实现,也可以用链表实现,这里介绍链表实现的方法

主要实现以下几个功能:

  1. is_empty()判断是否队列为空
  2. size()查看队列长度
  3. enqueue()向队列插入元素
  4. dequeue()从队列的头部取出一个元素
  5. 重写__iter__()和__next__()实现遍历功能

Python代码实现

class Node:def __init__(self, item):"""Define linked list node"""self.item = itemself.next = Noneclass Queue:def __init__(self):self.head = Noneself.last = Noneself.len = 0def is_empty(self):return self.len == 0def size(self):return self.lendef enqueue(self, item):"""Enqueue an element into this queue"""node = Node(item)if not self.last:self.head = nodeelse:self.last.next = nodeself.last = nodeself.len += 1def dequeue(self):"""Dequeue an element from this queue"""if self.head != self.last:# Has at least two elementsres = self.headself.head = self.head.nextself.len -= 1return res# Has one or zero elementres = self.headself.head = Noneself.last = Noneself.len -= 1return resdef __iter__(self):self.cur = self.headreturn selfdef __next__(self):try:temp = self.curself.cur = self.cur.nextreturn tempexcept AttributeError as e:raise StopIteration

功能验证

if __name__ == '__main__':queue = Queue()print(f"Is empty? {queue.is_empty()}")queue.enqueue(1)queue.enqueue(2)queue.enqueue(3)queue.enqueue(4)print(f"Show all elements in this queue: {[i.item for i in queue]}")print(f"Length of this queue: {queue.len}")print(f"Dequeue an element, its value: {queue.dequeue().item}")print(f"After dequeuing an element, length of this queue: {queue.len}")

打印结果:

Is empty? True
Show all elements in this queue: [1, 2, 3, 4]
Length of this queue: 4
Dequeue an element, its value: 1
After dequeuing an element, the length of this queue: 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA上Debug调试全流程

一、什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍。 二、Debug模式操作流程【应用】 能够使用断点调…

数据结构链表之符号表,Python3实现——8

数据结构链表之符号表 符号表的介绍 之前章节介绍的顺序表和链表都是一个节点储存一个元素的表,但在日常生活中我们还有很多一次需要储存成对或多个值的情况,例如: 符号表最主要的目的将一对元素,用一个键和一个值将其联系起来&…

OpenCV_01 简介+无版权安装+模块分析

OpenCV是应用广泛的开源图像处理库,我们以其为基础,介绍相关的图像处理方法:包括基本的图像处理方法:几何变换,形态学变换,图像平滑,直方图操作,模板匹配,霍夫变换等&…

KMP 算法 学习 整理

我自己整理的KMP算法的PDF文件:http://pan.baidu.com/s/1o8yKIi2提取密码:8291 别的就不多说啥了,感谢来自海子 博客园的 资料-- 转载于:https://www.cnblogs.com/suishiguang/p/6285979.html

OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变

1 图像的IO操作 这里我们会给大家介绍如何读取图像,如何显示图像和如何保存图像。 1.1 读取图像 API cv.imread()参数: 要读取的图像 读取方式的标志 cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默…

数据结构之树:树的介绍——9

数据结构之树,介绍篇 树的基本定义 介绍:树(tree)是计算机中非常重要的数据结构,它的外形看起来像一颗倒挂着的的树,使用树这种结构可以描述生活中很多的事物,如族谱,单位的组织架…

页面的宽度

页面的宽度等于内容 paddingmargin100%转载于:https://www.cnblogs.com/Zhaoyanguang/p/6292783.html

数据结构之二叉树:二叉查找树基本功能,Python代码实现——10

数据结构之二叉查找树的代码实现 定义 二叉查找树(Binary Search Tree,BST),是一种内存中特殊的树类型的存储结构,它允许对存储在其结点的数据进行增删改查,或者用作动态的数据集合,或是通过k…

OpenCV_03 图像的算数操作:图像的加法+图像的混合

1.图像的加法 你可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res img1 img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。 注意:OpenCV加法和Numpy加法之间存…

【bzoj2806】 Ctsc2012—Cheat

http://www.lydsy.com/JudgeOnline/problem.php?id2806 (题目链接) 题意 给出M个字符串组成“标准库”。定义L表示将一个字符串分成若干段,每一段的长度不小于L,其中是在标准库中任一字符串的子串的字符“段”的长度之和不小于原字符串长度之和的90%。N…

怎样在Linux驱动中创建proc节点(示例)

一、定义proc节点的读、写函数 static int tp_switch_writeproc(struct file *file,const char *buffer, unsigned long count,void *data) { sscanf(buffer,"%d", &tp_dbg); printk("tpd: proc-->tp_dbg %d\n", tp_dbg); return count; } static …

数据结构之二叉树:二叉查找树的先序、中序、后序、层序遍历,Python代码实现——10(续)

数据结构之二叉查找树的代码实现 本节继续对上一节BST的功能实现 在实现之前,先对要实现的功能进行一下简单的介绍 BST的几种常见遍历方式 以一个简化的树为例,一棵树包含根(父)结点和其左子树及右子树: 遍历顺序的先后是指根(父)结点被遍…

OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设…

Direct2D教程(九)渲染位图

概述 这篇的标题更确切的说应该叫位图画刷,这样才好和前几篇对应起来。在Direct2D中,位图的渲染也是通过画刷来实现的。 Direct2D中并没有直接操作位图的接口,而是借助WIC(Windows Image Component)来完成的。今天我们…

OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽

1 连通性 在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种:4邻接、8邻接和D邻接。分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x1,y);(x-1,y)&#xff…

数据结构之二叉树:折纸问题——11

数据结构之二叉树:Python代码解决折纸问题 折纸问题 要求:请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方…

OpenCV_06 图像平滑:图像噪声+图像平滑+滤波

1 图像噪声 由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。 1.1 椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白…

Android kernel Crash后,定位出错点的方法

1. 将/prebuild/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gdb 拷贝到/usr/local/bin下 2. 进入out/target/product/工程名xxx/obj/KERNEL_OBJ 目录,找到文件vmlinux

Vuejs 写法实例

原文地址&#xff1a;http://www.jianshu.com/p/293387d240b2 Hello World <div id"app">{{ message }}<button v-on:click"clickMe()">点击</button> <button v-on:click"clickMe">无参数的简写</button> </d…

数据结构之堆:堆的介绍与python实现——12

堆的简单实现与代码实现 堆的定义 在定义堆&#xff08;heap&#xff09;之前&#xff0c;先回顾一下完全二叉树的定义&#xff1a; 完全二叉树&#xff1a;除了最后一层的结点有可能没有达到最大值外&#xff0c;其它层的结点值都达到最大值&#xff0c;此外最后一层的叶子…