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 19 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
详解 Python 读写XML文件的实例
Aug 02 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Sanic框架请求与响应实例分析
Jul 16 Python
python机器学习之神经网络实现
Oct 13 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
python对Excel的读取的示例代码
Feb 14 Python
Python如何用re模块实现简易tokenizer
May 02 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
php 购物车实例(申精)
2009/05/11 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
表单内同名元素的控制
2006/11/22 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
javascript实现简单留言板案例
2021/02/09 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python常用内置函数总结
2015/02/08 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python实现随机漫步方法和原理
2019/06/10 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Python 列表反转显示的四种方法
2020/11/16 Python
武汉高蓝德国际.net机试
2016/06/24 面试题
企业宣传标语
2014/06/09 职场文书
应届生求职自荐信
2014/07/04 职场文书
办理护照工作证明
2014/10/10 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL