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实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
python生成圆形图片的方法
Mar 25 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
python3.6生成器yield用法实例分析
Aug 23 Python
Python 线程池用法简单示例
Oct 02 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
python是怎么被发明的
Jun 15 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
PHP执行速率优化技巧小结
2008/03/15 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
详解vue 组件注册
2020/11/20 Vue.js
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
Python之PyUnit单元测试实例
2014/10/11 Python
Python计算程序运行时间的方法
2014/12/13 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
学校后勤人员职责
2013/12/27 职场文书
优秀交警事迹材料
2014/01/26 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
推荐信范文大全
2015/03/27 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS