当前位置: 首页 > news >正文

python数据结构堆栈

堆是一种树形结构:满足两个主要性质

  • 堆是一种完全二叉树:堆中所有层级除了最后一层都是完全填满的,且最后一层的节点都是向左排列
  • 堆中的任意节点都不大于(或不小于)其子节点的值,这也是堆的属性
import heapq as hp
import numpy as npdata=np.arange(10)
np.random.shuffle(data)# 定义一个heap列表
heap=[]
#将数据堆入
for i in data:hp.heappush(heap,i)print(heap)hp.heappush(heap,100)print('列表中最小元素',hp.heappop(heap))  #弹出最小元素# heapify(heap) 可以将任意的列表转换为堆
data=np.random.randint(1,100,size=(10)).tolist()
print(data)
print('转换前',type(data))
hp.heapify(data)
print('转换后',type(data))print('列表中最小元素',hp.heappop(data))# heapreplace(heap,n) 弹出最小元素并且被n替代
hp.heapreplace(data,1000)
print(data)# nlargest(n,heap)  #返回第n个最大值
print('第一个最大值',hp.nlargest(1,data))
print('第二个最大值',hp.nlargest(2,data))#nsmallest(n,heap) #返回第n个最小值
print('第一个最小值',hp.nsmallest(1,data))
print('第二个最小值',hp.nsmallest(2,data))# 合并堆
data1=np.random.randint(1,10,5).tolist()
data2=np.random.randint(1,10,5).tolist()
hp.heapify(data1)
hp.heapify(data2)
merged=list(hp.merge(data1,data2))  #合并两个堆
print('合并堆',list(merged))
print('data1',data1)# 堆排序
# merged=hp.merge(data1,data2)
print('堆排序前',list(merged))
sortd_data=[hp.heappop(merged) for _ in range(len(list(merged)))]
print('堆排序后',sortd_data)

栈是一种线性结构,特点是后进先出。栈主要有两个操作,分别为压栈和弹栈。压栈是将数据压入栈顶,弹栈主要是从栈顶弹出元素。

栈的特点:

  • 后进先出
  • 栈的容量是固定的,当栈达到最大容量的时候,再次压栈会导致溢出
  • 栈的元素不可以随机访问,每次只能通过弹栈来获取栈顶元素
http://www.lryc.cn/news/277931.html

相关文章:

  • 从网页连接socket服务器和I/O
  • 鸿蒙HarmonyOS学习手册_入门篇
  • 人工智能复习
  • C++ 多态以及多态的原理
  • 贝蒂详解<string.h>(下)
  • 问题 F: 分巧克力
  • 安装pillow可能遇到的问题
  • 详解ajax、fetch、axios的区别
  • 致远OA getAjaxDataServlet XXE漏洞复现(QVD-2023-30027)
  • 力扣最热一百题——只出现一次的数字
  • UE5 UE4 修复GPU驱动程序崩溃
  • SpiderFlow爬虫平台 前台RCE漏洞复现(CVE-2024-0195)
  • 帆软report 设置条件属性,值为负数标为红色功能时,不生效
  • QML实现的图片浏览器
  • 【HTML】对字体的所有操作详解(经典)
  • 关于调查项目的讨论
  • Matlab三维绘图
  • 一体式气象站的优点是什么?带大家了解一下
  • 第八讲_css定位
  • 找出字符串中第一个匹配项的下标(Leetcode28)
  • 【分布式微服务专题】从单体到分布式(四、SpringCloud整合Sentinel)
  • RHCE9学习指南 第19章 网络时间服务器
  • 大模型 RAG 问答技术架构及核心模块盘点:从 Embedding、prompt-embedding 到 Reranker
  • 基于Selenium+Python的web自动化测试框架
  • LeetCode刷题--- 地下城游戏
  • 【sklearn练习】鸢尾花
  • STM32的USB设备库
  • 整数对最小和(100%用例)C卷 (JavaPythonC++Node.jsC语言)
  • QT笔记 - 加载带有提升为自定义部件类的“.ui“文件 - 重写QUiLoader::createWidget()函数
  • 开启Android学习之旅-2-架构组件实现数据列表及添加(kotlin)