用python实现数据结构中的堆
2018-01-29 00:00
204 查看
sortCommon.py
heap.py
参考链接:
https://www.cnblogs.com/JVxie/p/4859889.html
不过这个链接中的下沉方法中似乎有些错误,因为它的例子是实现小端堆,所以应该是把大的数字往下沉,所以在Shift_downy方法中的
应该改为
#!/usr/bin/python def swap(dataArray, i, j): temp = dataArray[i] dataArray[i] = dataArray[j] dataArray[j] = temp
heap.py
from sortCommon import swap class Heap(object): def __init__(self): self.queue = [] #上浮 def shiftUp(self, i): while(int(i/2)>=0): if self.queue[i] < self.queue[int(i/2)]: swap(self.queue, i, int(i/2)) i = int(i/2) else:break #下沉 def shiftDown(self, i): size = len(self.queue) while(int(i*2+1)<size): t = int(i*2+1) if t+1 < size and self.queue[t+1] < self.queue[t]: t+=1 if self.queue[i] > self.queue[t]: swap(self.queue, i, t) i = t else:break def push(self, x): self.queue.append(x) self.shiftUp(len(self.queue)-1) print(self.queue) def pop(self): swap(self.queue,0,len(self.queue)-1) del self.queue[len(self.queue)-1] self.shiftDown(0) print(self.queue) def top(self): return self.queue[0] def empty(self): return len(self.queue) == 0 if __name__ == '__main__': heap = Heap() size = int(input('请输入堆的节点数:')) for i in range(size): num = int(input('请输入一个数字:')) heap.push(num) print('从上到下输出堆顶元素') for i in range(size): print(heap.top()) heap.pop()
参考链接:
https://www.cnblogs.com/JVxie/p/4859889.html
不过这个链接中的下沉方法中似乎有些错误,因为它的例子是实现小端堆,所以应该是把大的数字往下沉,所以在Shift_downy方法中的
if( 堆数组名[ i ] < 堆数组名[ T ] )
应该改为
if( 堆数组名[ i ] > 堆数组名[ T ] )
相关文章推荐
- python——python数据结构之栈、队列的实现
- Python数据结构——树的实现
- [从头学数学] 第255节 Python实现数据结构:字典树(Trie)
- 用Python实现stack数据结构
- Python: 实现bitmap数据结构
- Python: 实现bitmap数据结构
- Python数据结构与算法之字典树实现方法示例
- 【python】python数据结构(三)——字符串:KMP算法的实现
- Python实现基础数据结构--队列
- python数据结构之图的实现
- 用Python实现基本数据结构——栈与队列
- [从头学数学] 第246节 Python实现数据结构:链表
- 基础数据结构:栈、队列——Python实现
- 小白学数据结构——三、图(基本概念及python实现)
- Python 下的数据结构实现
- python数据结构学习笔记-2016-10-24-02-使用排序列表实现集合ADT
- 基础数据结构 之 树(python实现)
- Python实现基本数据结构---队列操作
- 基础数据结构:栈、队列——Python实现
- 栈和队列数据结构的基本概念及其相关的Python实现