利用优先级队列实现堆栈

因为优先级队列是一种用来维护由一组元素构成的集合S的数据结构,执行的操作包含:

对于最大优先级队列:

insert(S,x)把元素x插入S,仍然保持最大优先级队列

maximum(S)取得最大关键字的值,也就是优先级最高的

extract_max(S):去的最大关键字的值并删除,剔除优先级最高的

increase_key(S,x,k):在第i的元素上换成K并保持S的性质,是此元素优先级提高

对于最小优先级队列性质正好相反:

通过minimun()和得到此队列中最小的元素,即优先级最小的元素。

通过extract_min()可得到优先级最小的元素,并将此元素从队列中删除。

通过insert()可一插入一个元素到此队列中,插入后此队列依旧是一个最小优先级队列。

通过decrease_key()可一将一个元素的优先级变小,并保持优先级队列的性质。

队列的实现:

因为队列的特点是先进先出(FIFO),可以用最小优先队列实现,设置插入元素的优先级属性就用基于最小堆的优先队列来实现,因为一个元素插入的越晚他的优先级就越低!所以可以用增量设置,因为在最小优先队列里元素值越大,优先级越低,这样子就可以实现队列一边插入,一边进入优先队列被设置成低的优先级;当出队的时候,extract_min()就可以把最先进入队列的元素出队了!

栈的实现:

栈的特点是后进先出,那用最小队列的话,进栈的时候,数据设置优先级属性,并且这个属性值递减的,因此优先级就是最大的,这样出队的时候就是把优先级队列最大的元素出队了。

实现的代码还得等待时间写出来!!嘎嘎!!

posted @ 2010-11-05 17:08  hailong  阅读(1203)  评论(0编辑  收藏  举报