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基于正则表达式实现文件内容替换的方法
Aug 30 Python
django2 快速安装指南分享
Jan 05 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
python如何实现内容写在图片上
Mar 23 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python实现机器学习算法的分类
Jun 03 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 cookie 登录验证示例代码
2009/03/16 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
演讲稿怎么写才完美
2014/01/02 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫