C语言--堆

  堆又称为优先队列,尽管名为优先队列,但堆并不是队列。在队列中,我们可以进行的限定操作是dequeue 和 

  Linux 内核中的调度器会按照各个进程的优先级来安排CPU执行哪一个进程。计算机中通常会有多个进程,每个进程有不同的优先级,该优先级的计算会综合多个因素,比如进程所需要耗费的时间,进程已经等待的时间,用户的优先级,用户设定的进程优先程度等等。内核会找到优先级最高的进程,并执行。如果有优先级更高的进程被提交,那么调度器会转而安排该进程运行。优先级比较低的进程则会等待。堆是实现调度器的理想数据结构。

  堆的一个经典的实现是完全二叉树,这样实现的堆称为二叉堆,完全二叉树是增加了限定条件的二叉树。假设一个二叉树的深度为n,为了满足完全二叉树的要求,该二叉树的前n-1层必须填满,第n 层也必须按照从左到右的顺序被填满。

  为了实现堆的操作,我们额外增加一个要求:任意节点的优先级不小于它的子节点,如果在上图中,设定小的元素值享有高的优先级。

  堆的主要操作是插入和删除最小元素,元素值本身为优先级键值,小元素享有高优先级。在插入或者刹车农户操作之后,我们必须保持该实现应有的性质。1.完全二叉树2.每个节点值都小于或等于它的子节点。

  在插入操作的时候,会破坏上述堆的性质。

猜你喜欢

转载自www.cnblogs.com/dagailun/p/12402676.html
今日推荐