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
python写入xml文件的方法
May 08 Python
Python实现的单向循环链表功能示例
Nov 10 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
Python更换pip源方法过程解析
May 19 Python
几款好用的python工具库(小结)
Oct 20 Python
python中__slots__节约内存的具体做法
Jul 04 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 Python
5个pandas调用函数的方法让数据处理更加灵活自如
Apr 24 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实现的MySQL通用查询程序
2007/03/11 PHP
优化PHP代码的53条建议
2008/03/27 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
python处理json数据中的中文
2014/03/06 Python
python元组操作实例解析
2014/09/23 Python
python简单文本处理的方法
2015/07/10 Python
详解python3百度指数抓取实例
2016/12/12 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
python3 读写文件换行符的方法
2018/04/09 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Flask配置Cors跨域的实现
2019/07/12 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
使用Python pip怎么升级pip
2020/08/11 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
会计出纳岗位职责
2013/12/25 职场文书
公务员综合考察材料
2014/02/01 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
新郎婚礼致辞
2015/07/27 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
element多个表单校验的实现
2021/05/27 Javascript
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js