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之eval()函数危险性浅析
Jul 03 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
django基础之数据库操作方法(详解)
May 24 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
Python tkinter事件高级用法实例
Jan 31 Python
Python实现XML文件解析的示例代码
Feb 05 Python
Django开发的简易留言板案例详解
Dec 04 Python
详解python的四种内置数据结构
Mar 19 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
python turtle绘图
May 04 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如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
Javascript中的delete介绍
2012/09/02 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
js+css实现打字效果
2020/06/24 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
高考考python编程是真的吗
2020/07/20 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
python飞机大战游戏实例讲解
2020/12/04 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
房产继承公证书
2014/04/09 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
医院科室评语
2015/01/04 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
在人间读书笔记
2015/06/30 职场文书