Python 实现数据结构-堆栈和队列的操作方法
作者:浩然haoran 发布时间:2021-05-25 20:56:16
队、栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样、五花八门的变形和实现方式。但不管他们形式上怎么变,队和栈都有其不变的最基本的特征,我们今天就从最基本,最简单的实现来看看队列和堆栈。
不管什么形式的队列,它总有的一个共同的特点就是“先进先出”。怎么理解呢?就像是超市排队结账,先排队的人排在队的前面,先结账出队。这是队列的特征。
而堆栈则和队列相反,它是“先进后出”,怎么理解呢?基本所有的编辑器都有一个撤销功能,就是按Ctrl+Z。当你写了一段文字,第一次按Ctrl+Z,消失的是你最后写的文字,第二次按Ctrl+Z,同样消失的是当前编辑器内最后写的文字。这就是一个堆栈结构的应用例子。
好,介绍完概念我们来看一下代码如何实现这两种数据结构,这篇文章我们采用最简单方式——通过Python原生的数据类型列表来实现。上篇文章,我们介绍了链表,通过链表我们同样可以实现堆栈和队列,感兴趣的朋友不妨尝试一下。
队列
首先,我们来定义一个队列类:
class Queue():
def __init__(self):
self.__list = list()
接下来,我们给队列类添加一些方法:
•判断队列是否为空
def isEmpty(self):
return self.__list == []•入队
def push(self, data):
self.__list.append(data)
•出队
def pop(self):
if self.isEmpty():
return False
return self.__list.pop(0)
•定义len()函数和print()操作类方法
def __len__(self):
return len(self.__list)
def __str__(self):
if self.isEmpty():
return ''
return ' '.join([str(x) for x in self.__list])
OK,到这里,一个最简单的队列就实现啦,自己实例化一个队列测试一下吧
下面我们来看堆栈
堆栈
堆栈的实现和队列类似,同样有入栈和出栈操作,我们直接上代码:
class Stack():
def __init__(self):
self.__list = list()
def isEmpty(self):
return self.__list == []
def push(self, data):
self.__list.append(data)
def pop(self):
if self.isEmpty():
return False
return self.__list.pop()
def __len__(self):
return len(self.__list)
def __str__(self):
if self.isEmpty():
return ''
return ' '.join([str(x) for x in self.__list])
可以看到,堆栈和队列的类实现基本相同,差别仅在出队和出栈的时候,队列是弹出第一个元素,而堆栈则是弹出最后一个元素。这也是队列和堆栈最本质的区别。
总结
以上所述是小编给大家介绍的Python 实现数据结构-堆栈和队列的操作方法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/dongyangblog/p/11192532.html


猜你喜欢
- 1,exists和in的理解(参考https://www.jb51.net/article/28922.htm) exists:如果子查询中
- 我们有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这样一次两次还好,数量多了,比较麻烦
- 1、字符串编码在go中rune是一个unicode编码点。我们都知道UTF-8将字符编码为1-4个字节,比如我们常用的汉字,UTF-8编码为
- 本文实例讲述了python写日志文件操作类与应用。分享给大家供大家参考,具体如下:项目的开发过程中,日志文件是少不了的,通过写日志文件,可以
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 一、添加user到group第一种:user.groups.add(1) # add by id第二种:from django.contri
- 第一步 去高德地图开放平台申请密钥 高德地图开放平台第二部 在vue-cli项目目录结构 里面多了config文件夹和
- 本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务。go get -u gi
- 在上个随笔中贴出了效果库的整体框架,和一个简单的opacity插件. 今天这个随笔主要是扩展其他常用 效果插件,毕竟框架只能是个空
- 当发现目录时出错如下:\windows\tensorflow\core\framework\op_kernel.cc:993] Not fo
- 本文实例讲述了Python使用ConfigParser模块操作配置文件的方法。分享给大家供大家参考,具体如下:一、简介用于生成和修改常见配置
- 功能:获取android设备中某一个app的cpu和内存环境:python和adb使用方法:使用adb连接android设备,打开将要测试的
- 一、类和对象通俗理解:类就是模板,对象就是通过模板创造出来的物体类(Class)由3个部分构成:类的名称: 类名类的属性: 一组数据类的方法
- CKEditor官方演示是有上传图片和浏览服务器文件功能的,但是我们自己下载回来的却没有这两个功能…… 其实还需要下载另外一个组件:CKFi
- 在目标检测的模型训练中, 我们通常都会有一个特征提取网络backbone, 例如YOLO使用的darknet SSD使用的VGG-16。为了
- 什么是 JScript?JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现。Internet Explorer
- Vue导航栏 用Vue写手机端的项目,经常会写底部导航栏,
- Python 通过微信邮件实现电脑关机,供大家参考,具体内容如下通过手机微信发送QQ邮件给sina邮箱,然后利用python的pop3定时检
- 本文实例讲述了Python实现操纵控制windows注册表的方法。分享给大家供大家参考,具体如下:使用_winreg模块的话基本概念:KEY
- 1 基本概念1.1 命名空间 (namespace)命名空间是变量名到对象的映射(name -> obj)。目前大多数的命名空间以类似