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字符串拼接、截取及替换方法总结分析
Apr 13 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
Python如何计算语句执行时间
Nov 22 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
python 实现PIL模块在图片画线写字
May 16 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python如何测试stdout输出
Aug 10 Python
python 19个值得学习的编程技巧
Aug 15 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
js控制input输入字符解析
2013/12/27 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
python 运用Django 开发后台接口的实例
2018/12/11 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
python实现人脸签到系统
2020/04/13 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
尽职尽责村干部自我鉴定
2014/01/23 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
顶岗实习计划书
2015/01/16 职场文书
淮海战役观后感
2015/06/11 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
作文之亲情600字
2019/09/23 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
Python图片处理之图片裁剪教程
2021/05/27 Python
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
React四级菜单的实现
2022/04/08 Javascript