news 2026/8/5 3:28:46

python实现堆结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python实现堆结构
class Heap: def __init__(self, is_min_heap=True): self.heap = [] self.is_min_heap = is_min_heap def _compare(self, a, b): """比较函数,根据是最小堆还是最大堆决定比较方式""" if self.is_min_heap: return a < b else: return a > b def _parent(self, index): """获取父节点索引""" return (index - 1) // 2 def _left_child(self, index): """获取左子节点索引""" return 2 * index + 1 def _right_child(self, index): """获取右子节点索引""" return 2 * index + 2 def _swap(self, i, j): """交换堆中两个元素""" self.heap[i], self.heap[j] = self.heap[j], self.heap[i] def _heapify_up(self, index): """向上调整堆结构""" parent = self._parent(index) if index > 0 and self._compare(self.heap[index], self.heap[parent]): self._swap(index, parent) self._heapify_up(parent) def _heapify_down(self, index): """向下调整堆结构""" largest = index left = self._left_child(index) right = self._right_child(index) if left < len(self.heap) and self._compare(self.heap[left], self.heap[largest]): largest = left if right < len(self.heap) and self._compare(self.heap[right], self.heap[largest]): largest = right if largest != index: self._swap(index, largest) self._heapify_down(largest) def insert(self, value): """插入元素到堆中""" self.heap.append(value) self._heapify_up(len(self.heap) - 1) def extract_top(self): """提取堆顶元素""" if len(self.heap) == 0: return None top = self.heap[0] self._swap(0, len(self.heap) - 1) self.heap.pop() self._heapify_down(0) return top def get_top(self): """获取堆顶元素""" if len(self.heap) == 0: return None return self.heap[0] def size(self): """获取堆的大小""" return len(self.heap) def is_empty(self): """判断堆是否为空""" return len(self.heap) == 0 # 测试代码 if __name__ == "__main__": # 测试最小堆 min_heap = Heap(is_min_heap=True) print("=== 测试最小堆 ===") data = [5, 3, 8, 1, 2, 7] for num in data: min_heap.insert(num) print(f"堆顶元素: {min_heap.get_top()}") print(f"堆大小: {min_heap.size()}") print("提取堆顶元素:") while not min_heap.is_empty(): print(min_heap.extract_top(), end=" ") print() # 测试最大堆 max_heap = Heap(is_min_heap=False) print("=== 测试最大堆 ===") data = [5, 3, 8, 1, 2, 7] for num in data: max_heap.insert(num) print(f"堆顶元素: {max_heap.get_top()}") print(f"堆大小: {max_heap.size()}") print("提取堆顶元素:") while not max_heap.is_empty(): print(max_heap.extract_top(), end=" ") print()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 16:14:41

Java计算机毕设之基于SpringBoot的高尔夫球场管理系统场地预订、会员管理的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/8/5 2:04:53

Java毕设项目:基于Springboot高尔夫场地预约网站管理系统基于SpringBoot的高尔夫球场管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/31 0:53:49

计算机Java毕设实战-基于SpringBoot的高尔夫球场管理系统的设计与实现基于SpringBoot+Vue的高尔夫球场服务系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/26 18:39:42

Agentic AI的10大技术创新案例:提示工程架构师的必备技能

Agentic AI的10大技术创新案例&#xff1a;提示工程架构师的必备技能 1. 引入与连接&#xff1a;当AI从“回答者”变成“行动者” 清晨7点&#xff0c;你揉着眼睛打开手机&#xff0c;收到一条消息&#xff1a;“您的生日派对方案已优化完成&#xff1a;原本预订的法式餐厅因周…

作者头像 李华
网站建设 2026/7/31 5:27:12

【接口测试】5_PyMySQL模块 _数据库工具类封装

文章目录一、封装的目的二、封装实现&#xff08;重点&#xff09;三、搭建框架四、案例&#xff08;重点&#xff09;4.1 设置私有方法4.2 实现类方法4.2.1 查询一条记录4.2.2 增删改数据4.3 完整代码实现五、小结一、封装的目的 将 数据库常用的操作&#xff0c;封装成类中的…

作者头像 李华
网站建设 2026/8/4 3:13:22

清华镜像源替换官方pip源:加速PyTorch相关包下载速度

清华镜像源加速 PyTorch 开发&#xff1a;从环境搭建到 GPU 训练的高效实践 在深度学习项目中&#xff0c;最让人沮丧的不是模型不收敛&#xff0c;而是——“pip install 卡在 5%”。你有没有经历过这样的场景&#xff1a;凌晨两点&#xff0c;终于写完论文复现实验代码&…

作者头像 李华