一、什么是堆?优先队列(PriorityQueue):特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。问题:如何组织优先队列?
一般的数组、链表?
序的数组或者链表?
叉搜索树?AVL树?
若采用数组或链表实现优先队列
数组插入元素总是插入尾部T=O(1)删除a.查找最大(小)元素
b.移动的元素,删除
T=O(1)
T=O(n)
链表插入元素总是插入链表的头部T=O(1)删除a.查找最大(小)关键字
b.删去结点
T=O(n)
T=O(n)
有序数组插入a.找到合适的位置
b.移动元素并插入
T=O(n)
T=O(n)
删除删去最后一个元素
T=O(1)
有序链表插入a.找到合适的位置
b.插入元素
T=O(n)
T=O(1)
删除删除首元素或最后元素
T=O(1)
二、是否可以采用二叉树存储结构?二叉搜索树?如果采用二叉树结构,应更