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中的字符串与字符编码(推荐)
Dec 14 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python Logging 日志记录入门学习
Jun 02 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
python实现推箱子游戏
Mar 25 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
Python切片列表字符串如何实现切换
Aug 06 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 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
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
php无限级分类实现方法分析
2016/10/19 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python 连续不等式语法糖实例
2020/04/15 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
家具厂厂长岗位职责
2014/01/01 职场文书
18岁生日感言
2014/01/12 职场文书
大学毕业寄语大全
2014/04/10 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
成本会计实训报告
2014/11/05 职场文书
谢师宴邀请函
2015/02/02 职场文书
会计稽核岗位职责
2015/04/13 职场文书
离职信范本
2015/06/23 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
Nginx源码编译安装过程记录
2021/11/17 Servers
vue如何清除浏览器历史栈
2022/05/25 Vue.js
Python+pyaudio实现音频控制示例详解
2022/07/23 Python