实现一个优先队列

1链表实现

简单链表的实现过程为在链表的头insert元素,使用O(1)时间完成,每次deleteMin元素,查找出链表中最小的元素,花费O(N)时间完成;另外一种方法是让链表保持有序状态,在进行任务insert的时候进行排序(花费O(N)),每次获取链表的头(花费O(1))。

2二叉查找树实现

使用二叉查找树实现中,对于insert和deleteMin花费时间均为O(log(N)),但存在一个潜在问题,既是容易造成不平衡二叉树,因为deleteMin始终是从左边开始往右边进行删除。

3二叉堆实现

二叉堆对于优先队列实现比较普遍,通二叉查找树一样,二叉堆具有两个性质:结构性和堆序性。
结构性:必须是一颗完全二叉树,树的插入从左到右,一颗完全二叉树的高度为小于log(N)的最大整数。
堆序性:二叉树的父节点必须小于两个子节点。
在二叉堆的具体实现中,通过一个数组来存储所有的元素,具体操作包括:
insert操作:在数组的最后位置添加该元素,然后再通过二叉堆的性质上虑新插入的元素,直到找到该元素的合适位置;
deleteMin操作:删除的元素为根元素,同时把数组最后元素赋值给根元素,根元素根据二叉堆的性质下虑,直到找到合适的位置。
buildHeap操作:对一组输入的数据进行构造堆,通过从下到上对非叶子节点进行下虑,所花费时间为O(N)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值