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 文件重命名工具代码
Jul 26 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
python如何读写csv数据
Mar 21 Python
解决python "No module named pip" 的问题
Oct 13 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
Python实现aes加密解密多种方法解析
May 15 Python
Python读取JSON数据操作实例解析
May 18 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python使用Kubernetes API访问集群
May 30 Python
实操Python爬取觅知网素材图片示例
Nov 27 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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一个找二层目录的小东东
2012/08/02 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
python中os操作文件及文件路径实例汇总
2015/01/15 Python
用python 制作图片转pdf工具
2015/01/30 Python
python九九乘法表的实例
2017/09/26 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
python 制作磁力搜索工具
2021/03/04 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
协议书的格式
2014/04/23 职场文书
2014年党建工作总结
2014/11/11 职场文书
晚会闭幕词
2015/01/28 职场文书
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL