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获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
python实现合并两个排序的链表
Mar 03 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
详解python编译器和解释器的区别
Jun 24 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
python3使用GUI统计代码量
Sep 18 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 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设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
javascript中Function类型详解
2015/04/28 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
js实现时钟定时器
2020/03/26 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
python实现聚类算法原理
2018/02/12 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
自学python的建议和周期预算
2019/01/30 Python
python如何实现异步调用函数执行
2019/07/08 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python龙贝格法求积分实例
2020/02/29 Python
Python高并发和多线程有什么关系
2020/11/14 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
估算杭州有多少软件工程师
2015/08/11 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
市场策划求职信
2014/08/07 职场文书
授权委托书公证
2014/09/14 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书