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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
python实现数据图表
Jul 29 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
详解Python 中的容器 collections
Aug 17 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python Matplotlib模块的使用
Sep 16 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
取得传值的函数
2006/10/27 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
教师推荐信范文
2013/11/24 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
小区文明倡议书
2014/05/16 职场文书
2014年财政工作总结
2014/12/10 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
针对吵架老公保证书
2015/05/08 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
2016年重阳节慰问信
2015/12/01 职场文书