Python 实现数据结构中的的栈队列


Posted in Python onMay 16, 2019

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈可以用顺序表实现,也可以用链表实现,这里为了方便就用顺序表实现。

# -*- coding: utf-8 -*-
class Stack(object):
  """栈的实现类"""
  def __init__(self):
    self.__items = []
  # push(item) 添加一个新的元素item到栈顶
  def push(self, item):
    self.__items.append(item)
  # pop() 弹出栈顶元素
  def pop(self):
    return self.__items.pop()
  # peek() 返回栈顶元素
  def peek(self):
    return self.__items[self.size() - 1]
  # is_empty() 判断栈是否为空
  def is_empty(self):
    return self.__items == []
  # size() 返回栈的元素个数
  def size(self):
    return len(self.__items)
if __name__ == '__main__':
  stack = Stack()
  stack.push(2)
  stack.push(3)
  stack.push(4)
  stack.push(5)
  tmp = stack.pop()
  print(tmp)
  print(stack.peek())
  print(stack.size())
  print(stack.is_empty())

队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表

# -*- coding: utf-8 -*-
class Queue(object):
  """队列的实现"""
  def __init__(self):
    self.__items = []
  # push(item) 往队列中添加一个item元素
  def push(self, item):
    self.__items.insert(0, item)
  # pop() 从队列头部删除一个元素
  def pop(self):
    return self.__items.pop()
  # is_empty() 判断一个队列是否为空
  def is_empty(self):
    return self.__items == []
  # size() 返回队列的大小
  def size(self):
    return len(self.__items)
if __name__ == '__main__':
  queue = Queue()
  queue.push(1)
  queue.push(2)
  queue.push(3)
  queue.push(4)
  print(queue.pop())
  print(queue.pop())
  print(queue.pop())
  print(queue.size())
  print(queue.is_empty())

双端队列

双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。

双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。

# -*- coding: utf-8 -*-
class Deque(object):
  """双端队列"""
  def __init__(self):
    self.__items = []
  # add_front(item) 从队头加入一个item元素
  def add_front(self, item):
    self.__items.insert(0, item)
  # add_rear(item) 从队尾加入一个item元素
  def add_rear(self, item):
    self.__items.append(item)
  # remove_front() 从队头删除一个item元素
  def remove_front(self):
    return self.__items.pop(0)
  # remove_rear() 从队尾删除一个item元素
  def remove_rear(self):
    return self.__items.pop()
  # is_empty() 判断双端队列是否为空
  def is_empty(self):
    return self.__items == []
  # size() 返回队列的大小
  def size(self):
    return len(self.__items)
  def print_items(self):
    print(self.__items)
if __name__ == '__main__':
  deque = Deque()
  deque.add_front(1)
  deque.add_front(3)
  deque.add_front(5)
  deque.print_items()
  deque.add_rear(9)
  deque.add_rear(8)
  deque.add_rear(7)
  deque.print_items()
  print(deque.is_empty())
  print(deque.remove_front())
  print(deque.remove_rear())
  deque.print_items()

总结

以上所述是小编给大家介绍的Python 实现数据结构中的的栈队列,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
深入解读Python解析XML的几种方式
Feb 16 Python
python中requests库session对象的妙用详解
Oct 30 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
Python基于WordCloud制作词云图
Nov 29 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
Elasticsearch 聚合查询和排序
Apr 19 Python
Python 一键制作微信好友图片墙的方法
May 16 #Python
Python实现京东秒杀功能代码
May 16 #Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 #Python
Python异步操作MySQL示例【使用aiomysql】
May 16 #Python
Django 表单模型选择框如何使用分组
May 16 #Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 #Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 #Python
You might like
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JScript的条件编译
2007/05/29 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
python写入文件自动换行问题的方法
2019/07/05 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python输出数学符号实例
2020/05/11 Python
python和php学习哪个更有发展
2020/06/17 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
类的核心特性有哪些
2014/01/01 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
办公文员的工作岗位职责
2013/11/12 职场文书
员工培训邀请函
2014/02/02 职场文书
煤矿安全协议书
2014/08/20 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
党校学习党性分析材料
2014/12/19 职场文书
教师年终个人总结
2015/02/11 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS