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刷投票的脚本实现代码
Nov 08 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
关于numpy数组轴的使用详解
Dec 05 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
django实现日志按日期分割
May 21 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
天津市收音机工业发展史
2021/03/04 无线电
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
调整PHP的性能
2013/10/30 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php汉字转拼音的示例
2014/02/27 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
JavaScript 字符编码规则
2009/05/04 Javascript
Javascript 汉字字节判断
2009/08/01 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
python写一个md5解密器示例
2018/02/23 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
2019年.net常见面试问题
2012/02/12 面试题
高校学生干部的自我评价分享
2013/11/04 职场文书
问卷调查计划书
2014/01/10 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
小学语文教研活动总结
2014/07/01 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
搬迁通知
2015/04/20 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android