堆,栈,队列

导读:本篇文章讲解 堆,栈,队列,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在这里插入图片描述

是一个二叉树,它的每个父节点的值都只会小于或等
于所有孩子节点(的值)。
• 它使用了数组来实现:从零开始计数,对于所有的 k ,
都有 heap[k] <= heap[2k+1] 和 heap[k] <= heap[2k+2]。
• 堆最有趣的特性在于最小的元素总是在根结点:heap[0]。

函数 描述
heapq.heapify(x) 将list x 转换成堆
heapq.heappush(heap, item 将 item 的值加入 heap 中,保持堆的不变性。
heapq.heappop(heap) 弹出并返回 heap 的最小的元素,保持堆的不变性。使用 heap[0] ,可以只访问最小的元素而不弹出它。

heapq.heappushpop(heap, item)
• 将 item 放入堆中,然后弹出并返回
heap 的最小元素。
• 堆大小保持不变。
• 先放进去、再弹出来

互动函数:
heapq.heapreplace(heap, item)
• 弹出并返回 heap 中最小的一项,
同时推入新的 item。
• 堆的大小不变。
• 先弹出来一个,再放一个
• 替换再排序

通用函数:
heapq.merge(*iterables)
将多个已排序的输入合并为一个已排序的输出(例如,
合并来自多个日志文件的带时间戳的条目)。 返回已排
序值的 iterator。
heapq.nlargest(n, iterable)
从 iterable 所定义的数据集中返回前 n 个最大元素组成
的列表。
heapq.nsmallest(n, iterable)
从 iterable 所定义的数据集中返回前 n 个最小元素组成
的列表。

练习:
构造一个堆:
• 删除其中最小的值;
• 在其中增加一个值;

import heapq
x=[1,2,3,4,6,7,9,14,15,17,23,36,0]
heapq.heapify(x)
print(x)
heapq.heappop(x)
print(x)
heapq.heappush(x,8)#之前的堆已经改变,这次改变的是上次的结果
print(x)

运行结果:
[0, 2, 1, 4, 6, 3, 9, 14, 15, 17, 23, 36, 7]
[1, 2, 3, 4, 6, 7, 9, 14, 15, 17, 23, 36]
[1, 2, 3, 4, 6, 7, 9, 14, 15, 17, 23, 36, 8]

栈和队列:

队列:
在这里插入图片描述
原则:先进先出
应用场景
• 历史记录:最早生成的,最早丢弃
• 数据备份:最先生成的,最先丢弃
• 打印机控制
• CPU分配等

实现:

from collections import deque #需要进行导入
x=deque([9,7,8])
print(x)
x.append(666)
print(x)
x.popleft() #不用加参数,函数定义了从左边进行执行
print(x)

输出结果:
deque([9, 7, 8])
deque([9, 7, 8, 666])
deque([7, 8, 666])

栈:
原则:后进先出
应用场景:
• 操作回退:Ctrl+Z
• 数据库系统等场景
• 浏览器回退上一页
• 括号匹配

实现:

x=[9,7,8]
print(x)
x.append(666)
print(x)
x.pop()
print(x)

运行结果:
[9, 7, 8]
[9, 7, 8, 666]
[9, 7, 8]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/61419.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!