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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 Python
Python的__builtin__模块中的一些要点知识
May 02 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
50行Python代码实现人脸检测功能
Jan 23 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python使用shutil模块实现文件拷贝
Jul 31 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
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python reverse反转部分数组的实例
2018/12/13 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
python用什么编辑器进行项目开发
2020/06/17 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
打造完美自荐信
2014/01/24 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
《石榴》教学反思
2014/03/02 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
golang中的并发和并行
2021/05/08 Golang
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android