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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
python实现web方式logview的方法
Aug 10 Python
Python学习入门之区块链详解
Jul 25 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
如何基于python实现脚本加密
Dec 28 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
python绘制玫瑰的实现代码
Mar 02 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
python Xpath语法的使用
Nov 26 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python中实现栈的三种方法
2020/12/19 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
游戏商店:Eneba
2020/04/25 全球购物
行政总监岗位职责
2013/12/05 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
研究生导师推荐信
2014/09/06 职场文书
房屋质量投诉书
2015/07/02 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android