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实现获取域名所用服务器的真实IP
Oct 25 Python
学习python类方法与对象方法
Mar 15 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
Python实现KNN邻近算法
Jan 28 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
Python玩转加密的技巧【推荐】
May 13 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
Python实现汇率转换操作
May 03 Python
Python ellipsis 的用法详解
Nov 20 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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版单点登陆实现方案的实例
2016/11/17 PHP
js实现简单登录功能的实例代码
2013/11/09 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
python实现自动更换ip的方法
2015/05/05 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
比利时家具购买网站:Home24
2019/01/03 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
关于工资低的辞职信
2014/01/14 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
毕业留言寄语大全
2014/04/10 职场文书
企业宣传工作方案
2014/06/02 职场文书
八项规定对照检查材料
2014/08/31 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
黄山导游词
2015/01/31 职场文书
导游词幽默开场白
2019/06/26 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
js实现自动锁屏功能
2021/06/02 Javascript
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android