Online Book Reader

Home Category

Mastering Algorithms With C - Kyle Loudon [109]

By Root 1527 0
or -1 otherwise.

Description

Inserts an element into the priority queue specified by pqueue. The new element contains a pointer to data, so the memory referenced by data should remain valid as long as the element remains in the priority queue. It is the responsibility of the caller to manage the storage associated with data.

Complexity

O (lg n), where n is the number of elements in the priority queue.

Name


pqueue_extract

Synopsis

int pqueue_extract(PQueue *pqueue, void **data);

Return Value

0if extracting the element is successful, or -1 otherwise.

Description

Extracts the element at the top of the priority queue specified by pqueue. Upon return, data points to the data stored in the element that was extracted. It is the responsibility of the caller to manage the storage associated with the data.

Complexity

O (lg n), where n is the number of elements in the priority queue.

Name


pqueue_ peek

Synopsis

void *pqueue_peek(const PQueue *pqueue);

Return Value

Highest priority element in the priority queue, or NULL if the priority queue is empty.

Description

Macro that evaluates to the highest priority element in the priority queue specified by pqueue.

Complexity

O (1)

Name


pqueue_size

Synopsis

int pqueue_size(const PQueue *pqueue);

Return Value

Number of elements in the priority queue.

Description

Macro that evaluates to the number of elements in the priority queue specified by pqueue.

Complexity

O (1)

Implementation and Analysis of Priority Queues


There are several ways to implement a priority queue. Perhaps the most intuitive approach is simply to maintain a sorted set of data. In this approach, the element at the beginning of the sorted set is the one with the highest priority. However, inserting and extracting elements require resorting the set, which is an O (n) process in the worst case, where n is the number of elements. Therefore, a better solution is to keep the set partially ordered using a heap. Recall that the node at the top of a heap is always the one with the highest priority, however this is defined, and that repairing the heap after inserting and extracting data requires only O (lg n) time.

A simple way to implement a priority queue as a heap is to typedef PQueue to Heap (see Example 10.3). Since the operations of a priority queue are identical to those of a heap, only an interface is designed for priority queues and the heap datatype serves as the implementation (see Examples Example 10.2 and Example 10.3). To do this, each priority queue operation is simply defined to its heap counterpart. The one exception to this is pqueue_ peek, which has no heap equivalent. This operation works just like pqueue_extract, except that the highest priority element is only returned, not removed.

Example 10.3. Header for the Priority Queue Abstract Datatype

/*****************************************************************************

* *

* ------------------------------- pqueue.h ------------------------------- *

* *

*****************************************************************************/

#ifndef PQUEUE_H

#define PQUEUE_H

#include "heap.h"

/*****************************************************************************

* *

* Implement priority queues as heaps. *

* *

*****************************************************************************/

typedef Heap PQueue;

/*****************************************************************************

* *

* --------------------------- Public Interface --------------------------- *

* *

*****************************************************************************/

#define pqueue_init heap_init

#define pqueue_destroy heap_destroy

#define pqueue_insert heap_insert

#define pqueue_extract heap_extract

#define pqueue_peek(pqueue) ((pqueue)->tree == NULL ? NULL : (pqueue)->tree[0])

#define pqueue_size heap_size

#endif

Priority Queue Example: Parcel Sorting


Most delivery services offer several options for how fast a parcel can be delivered. Generally, the more a person is

Return Main Page Previous Page Next Page

®Online Book Reader