Python 实现数据结构-堆栈和队列的操作方法


Posted in Python onJuly 17, 2019

队、栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样、五花八门的变形和实现方式。但不管他们形式上怎么变,队和栈都有其不变的最基本的特征,我们今天就从最基本,最简单的实现来看看队列和堆栈。

不管什么形式的队列,它总有的一个共同的特点就是“先进先出”。怎么理解呢?就像是超市排队结账,先排队的人排在队的前面,先结账出队。这是队列的特征。

而堆栈则和队列相反,它是“先进后出”,怎么理解呢?基本所有的编辑器都有一个撤销功能,就是按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 实现数据结构-堆栈和队列的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
python 编写简单网页服务器的实例
Jun 01 Python
python range实例用法分享
Feb 06 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
Python基于numpy模块实现回归预测
May 14 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
详解如何修改python中字典的键和值
Sep 29 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 #Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 #Python
python中dict使用方法详解
Jul 17 #Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 #Python
python对矩阵进行转置的2种处理方法
Jul 17 #Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 #Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 #Python
You might like
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php连接mysql数据库
2017/03/21 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
jQuery Selector选择器小结
2010/05/06 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python yield使用方法示例
2013/12/04 Python
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
Python正则表达式的使用范例详解
2014/08/08 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
小学教师管理制度
2014/01/18 职场文书
岗位职责怎么写
2014/03/14 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
Nginx缓存设置案例详解
2021/09/15 Servers