【数据结构】栈、队列、堆的python实现

  • 一、栈的python实现
    • 1.1、栈的列表实现方法
    • 1.2、用双向队列模拟栈
  • 二、队列的python实现
    • 2.1、队列的列表实现
    • 2.2、使用deque实现队列
  • 三、堆的python实现

栈、队列、堆是基础的数据结构类型,其中栈是后进先出的数据结构;队列是先进先出的数据结构;堆通常可以被看成一棵树,又可以被分为最小堆和最大堆,最小堆是指堆中某个节点的元素总不大于其父节点的值;最大堆是指堆中某个元素总不小于其父节点的值。

一、栈的python实现

1.1、栈的列表实现方法

列表(list)是python中经常用到的基础数据结构,我们可以使用列表来模拟栈,实现入栈,出栈等效果。

stack = []
#入栈
stack.append(1)
print(stack)
stack.append(2)
print(stack)
stack.append(5)
print(stack)
#查看栈顶元素
top = stack[-1]
print('栈顶元素为:',top)
#出栈
stack.pop()
print(stack)
#判断栈是否为空
if stack:print('Not Empty')
else:print('Empty')

1.2、用双向队列模拟栈

python的内置模块collections中包含了双向队列deque的数据结构类型,可以在队列的左端和右端实现入队和出队,在双向队列的右端指向入队和出队动作就可以模拟入栈和出栈。

from collections import dequestack = deque()
#入栈
stack.append(1)
print(stack)
stack.append(2)
print(stack)
#出栈
a = stack.pop()
print(stack)
print(list(stack))#判断栈是否为空
if list(stack):print('栈不为空!')
else:print('栈为空!')

二、队列的python实现

2.1、队列的列表实现

可以使用在列表尾部添加元素模拟入队,列表头部删除元素模拟出队。

queue = []
#入队
queue.append(1)
print(queue)
queue.append(2)
print(queue)
queue.append(5)
print(queue)
#出队
queue.pop(0)
print(queue)
#判断队列是否为空
if queue:print('Not Empty')
else:print('Empty')

2.2、使用deque实现队列

from collections import dequequeue = deque()
#入队
queue.append(1)
print(queue)
queue.append(1)
print(queue)
queue.append(7)
print(queue)
#出队
queue.popleft()
print(queue)
#在某位置插入元素
queue.insert(1,3)
print(queue)
#判断队列是否为空
if queue:print('Not Empty')
else:print('Empty')

三、堆的python实现

python中内置了实现堆的模块,可以直接调用。

import heapq#列表h
h = [1,4,5,2,7]#对h进行最小堆排序
heapq.heapify(h)
print(h)#删除堆顶元素
a = heapq.heappop(h)
print('堆顶元素为:',a)
print('堆排序为:',h)
#在堆中加入一个元素val,并对堆重新排序
val = 3
heapq.heappush(h,val)
print('堆排序为:',h)#在堆中加入一个元素,保持堆得元素数量不变,如果加入的元素大于堆顶元素则删除堆顶元素。
val = 4
heapq.heapreplace(h,val)
print('堆排序为:',h)

【数据结构】栈、队列、堆的python实现相关推荐

  1. 数据结构栈队列链表数组

    目录: 数据结构 栈(stack) 队列 链表 数组 数据结构 数据结构是什么 简单来说,数据结构就是设计数据以何种方式存储在计算机中 比如:列表,集合,与字典等都是一种数据结构 程序 = 数据结构 ...

  2. 常见数据结构-栈-队列-数组-链表-哈希表

    数据结构   数据结构是计算机存储.组织数据的方式.是指相互之间存在一种或多种特定关系的数据元素的集合   通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 持续更新,学一个记一个- 栈 ...

  3. Java集合常见数据结构-栈/队列/数组/链表/红黑树

    数组 链表 红黑树

  4. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!

    链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错. 综合多方面的原因,链 ...

  5. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  6. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构

    数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...

  7. 栈和队列的区别,栈和堆的区别

    栈和队列的区别: 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 栈是先进后出,队列是先进先出. 栈只允许在表尾一端进行插入和删除,队列只允许在表尾一端进行插入,在表头一端进行删除 ...

  8. 用Python实现数据结构之队列

    队列 队列与栈的类型很相似,但它遵循的原则是先进先出(FIFO),也就是元素插入的时候只能在该数据结构的末端,而删除只能删除最前面的元素.队列同样应用广泛,例如打印机的队列或者是一个web服务器响应请 ...

  9. 栈和队列的区别,栈和堆得区别

    栈和队列的区别: 1.栈是先进后出.队列是先进先出. 2.栈只允许在一端进行插入和删除,队列则在表的一段插入另一端删除. 3.在栈中遍历数据需要扫描全部数据,所以比较慢.而在队列中可以从两端进行所以速 ...

最新文章

  1. padding在css中是什么意思,CSS里的padding是什么意思?
  2. oracle 9i 在安装到Oracle Database Configuration assistant....的时候
  3. PHP的数组结构是用哈希表实现的
  4. spring日志报错提醒_Spring Boot 2.x : 整合日志框架 Log4j2
  5. CPU缓存越大计算机的性能越好,CPU缓存真的越大越好?小心你的钱包
  6. ffmpeg -视频旋转和高清转码示例
  7. Android设为系统默认的短信应用
  8. java listt add_Java8 使用流抽取ListT集合中T的某个属性操作
  9. 网络工程师试题(二)2020-12-8
  10. 记一次maven打包命令及指定pom文件
  11. 点对点广域网技术介绍
  12. sharepoint 工作经验与技能总结
  13. 暴风魔镜S1拆解和低成本DIY适应大手机
  14. 通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
  15. 为什么没有人投资 Livid 的 V2EX.com ?
  16. 有搜python题目的软件吗_Python开发及应用-中国大学mooc-试题题目及答案
  17. 派森python_python2.7下载-派森(Python)下载v2.7.18 官方正式版【x86|x64】-西西软件下载...
  18. 【asp.net core 系列】5 布局页和静态资源
  19. bp神经网络模式识别,bp神经网络数字识别
  20. JUC学习(一):synchronized的介绍及使用(实现多线程卖票)

热门文章

  1. Android源码学习之浅析SystemServer脉络
  2. 大数据开发笔记(四):Hive数仓调优
  3. 如何更好地优化大数据分析
  4. 一个经典约瑟夫问题的分析与解答
  5. sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!
  6. opengl计算帧率_unity如何计算帧率FPS
  7. java第七章第九题_Java2程序设计基础第七章课后习题
  8. Toolbar的简单使用和封装
  9. 推荐 | 微软SAR近邻协同过滤算法相关问题(三)
  10. Node.js 11.14.0 发布,服务器端的 JavaScript 运行环境