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中使用matplotlib模块绘制数据图的示例
May 04 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
浅析python递归函数和河内塔问题
Apr 18 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
python读取几个G的csv文件方法
Jan 07 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 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 正则学习实例
2008/07/30 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
js实现点击烟花特效
2020/10/14 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
Django中的Model操作表的实现
2018/07/24 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
创先争优一句话承诺
2014/05/29 职场文书
文员岗位职责
2015/02/04 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书