利用优先级队列实现堆栈
因为优先级队列是一种用来维护由一组元素构成的集合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()就可以把最先进入队列的元素出队了!
栈的实现:
栈的特点是后进先出,那用最小队列的话,进栈的时候,数据设置优先级属性,并且这个属性值递减的,因此优先级就是最大的,这样出队的时候就是把优先级队列最大的元素出队了。
实现的代码还得等待时间写出来!!嘎嘎!!