当前位置:首页 > 教育培训 >

python 栈和堆的区别(python中栈和队列区别)

来源:原点资讯(www.yd166.com)时间:2023-06-19 19:00:29作者:YD166手机阅读>>

堆定义

堆是一种数据结构,它是一颗完全二叉树。其中每个父节点的值都小于或等于其所有子节点的值。整个堆的最小元素总是位于二叉树的根节点。python的heapq模块提供了对堆的支持。堆数据结构最重要的特征是heap[0]永远是最小的元素

区分堆(heap)与栈(stack):

堆与二叉树有关,像一堆金字塔型泥沙;而栈像一个直立垃圾桶,一列下来。

堆常用方法

import heapq import random heap = [] # 数据加入堆中 for i in range(10): heapq.heappush(heap, random.randint(1, 100)) print(f"heap: {heap}") # 弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它 pop = heapq.heappop(heap) print(f"pop min: {pop}") # 将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率。 pop_push = heapq.heappushpop(heap, 200) print(f"pop and push: {pop_push}") # 将list x 转换成堆,原地,线性时间内 heapq.heapify(heap) print(type(heap), heap) # 弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。 如果堆为空则引发 IndexError s = heapq.heapreplace(heap, 201) print(f"pop:{s}, heap: {heap}") # 将多个已排序的输入合并为一个已排序的输出 # heapq.merge(*iterables, key=None, reverse=False) # 类似于 sorted(itertools.chain(*iterables)) 但返回一个可迭代对象,不会一次性地将数据全部放入内存,并假定每个输入流都是已排序的(从小到大) li = [1, 2, 3, 5] li1 = [2, 3, 5, 6] ll = heapq.merge(*(li, li1), reverse=False) print(f"heap merge: {[t for t in ll]}") # 查询堆中的最大元素,n表示查询元素个数 top_3 = heapq.nlargest(3, heap) print(f"heap top3: {top_3}") # 查询堆中的最小元素,n表示查询元素的个数 min_3 = heapq.nsmallest(3, heap) print(f"heap min3: {min_3}") print(f"heap: {heap}")结果

python 栈和堆的区别,python中栈和队列区别(1)

堆算法示例
  • 合并K个升序链表

给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。

import heapq from typing import List, Optional class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]: # 堆排序 heap = [] for i in lists: while i: heapq.heappush(heap, i.val) # 值加入heap i = i.next new_node = move_node = ListNode() while heap: move_node.next = ListNode(heapq.heappop(heap)) # 每次弹出最小的值 move_node = move_node.next return new_node.next,

栏目热文

python有堆栈吗(python堆栈大小怎么设置)

python有堆栈吗(python堆栈大小怎么设置)

Python实现堆栈堆栈是一个后进先出的数据结构,其工作方式就像一堆汽车排队进去一个死胡同里面,最先进去的一定是最后出来...

2023-06-19 19:31:27查看全文 >>

python栈基本结构与操作(python全栈入门教程)

python栈基本结构与操作(python全栈入门教程)

如何理解“栈”?关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放...

2023-06-19 19:21:17查看全文 >>

圣诞节是外国人的新年吗(圣诞节是不是外国人的一年)

圣诞节是外国人的新年吗(圣诞节是不是外国人的一年)

因为供应链出了严重问题,美国人的圣诞节,没法过了。圣诞节,就是美国人的春节,是一年里意义最大的节日。因为货物大量增加,却...

2023-06-19 19:31:07查看全文 >>

手机支架的作用(手机支架用途是什么)

手机支架的作用(手机支架用途是什么)

智能手机是当下很多人必备的通讯工具,而汽车是人们出门必备的出行工具,所以两者的发展也是非常的迅速的。智能手机近几年来,功...

2023-06-19 19:08:42查看全文 >>

自行车前筐大全(山地自行车前车筐)

自行车前筐大全(山地自行车前车筐)

如今,汽车已经改变了我们的生活,让距离不再遥远。但是当大家都在讨论汽车的时候,却忽略了自行车。自行车,绿色,低碳环保的出...

2023-06-19 19:03:31查看全文 >>

python堆和栈的概念(Python概念)

python堆和栈的概念(Python概念)

作者丨灯会来源丨极市平台编辑丨极市平台算法1.数组和链表的区别数组是将元素在内存中连续存放,由于每个元素占用内存相同,可...

2023-06-19 18:58:06查看全文 >>

python中的栈(什么叫python栈)

python中的栈(什么叫python栈)

栈的特点是后进先出!栈可以用顺序表实现,也可以用链表实现。栈是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删...

2023-06-19 19:23:10查看全文 >>

python的栈用什么实现

python的栈用什么实现

前言Python本身已有顺序表(List、Tupple)的实现,所以这里从栈开始。什么是栈想象一摞被堆起来的书,这就是栈...

2023-06-19 18:59:26查看全文 >>

python的全栈是什么(python 全栈开发学习什么)

python的全栈是什么(python 全栈开发学习什么)

全栈指掌握多种技能,并能利用多种技能独立完成产品。通俗的说就是与这项技能有关的都会,都能独立完成。python,因为目前...

2023-06-19 19:27:58查看全文 >>

什么叫python栈(python全栈要学什么)

什么叫python栈(python全栈要学什么)

究竟栈为何物栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行。栈是一...

2023-06-19 18:53:38查看全文 >>

文档排行