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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
python re正则表达式模块(Regular Expression)
Jul 16 Python
详细介绍Python函数中的默认参数
Mar 30 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Pycharm小白级简单使用教程
Jan 08 Python
python 实现分组求和与分组累加求和代码
May 18 Python
python线程池如何使用
May 28 Python
pycharm 实现调试窗口恢复
Feb 05 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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
基于文本的搜索
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
浅析php单例模式
2014/11/25 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
wxPython实现整点报时
2019/11/18 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
幼儿园家长评语
2014/02/10 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
委托书格式范文
2015/01/28 职场文书
总账会计岗位职责
2015/04/02 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
Python matplotlib绘制雷达图
2022/04/13 Python