问题
优先队列:取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
方案
数组:插入——总是在数组尾部插入,时间复杂性为
删除——查找最大(小)关键字,从数组中删去元素,时间复杂性为。并移动元素位置,时间复杂性为
链表:插入——总是插入链表的头部,时间复杂性为
删除——查找最大(小)关键字,时间复杂性为。删除结点,不用移动元素,时间复杂性为
有序数组:
插入——找到合适的位置,时间复杂性为,移动并插入元素,时间复杂性为
删除——删去最后一个元素,时间复杂性为
有序链表:
插入——找到合适的位置,时间复杂性为,移动并插入元素,时间复杂性为
删除——删去最后一个元素,时间复杂性为
用二叉树存储结构?插入和删除复杂度不超过树的高度,优先队列用完全二叉树表示
堆的两个特性:
结构性:用数组表示完全二叉树
有序性:任意结点的关键字是其子树所有结点的最大值(最小值) 。最大堆和最小堆如下图所示: