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实现稀疏矩阵示例代码
Jun 09 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
python使用webdriver爬取微信公众号
Aug 31 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Python随机数函数代码实例解析
Feb 09 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
pytorch 实现在测试的时候启用dropout
May 27 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP中extract()函数的妙用分析
2012/07/11 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
js表格分页实现代码
2009/09/18 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
python封装对象实现时间效果
2020/04/23 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
HTTP状态码详解
2021/03/18 杂记
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
国家励志奖学金获奖感言
2014/01/09 职场文书
职工小家建设活动方案
2014/08/25 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
关于颐和园的导游词
2015/01/30 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
施工安全责任协议书
2016/03/23 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python