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通过pil模块获得图片exif信息的方法
Mar 16 Python
Python实现二分查找算法实例
May 26 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python之pandas用法大全
Mar 13 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
一行python实现树形结构的方法
Aug 09 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Python判断telnet通不通的实例
2019/01/26 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
初三语文教学计划
2015/01/22 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
报案材料怎么写
2015/05/25 职场文书
飞屋环游记观后感
2015/06/08 职场文书
母亲去世追悼词
2015/06/23 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python