gft_pqueue32.h
Go to the documentation of this file.
1 #ifndef _GFT_PQUEUE32_H_
2 #define _GFT_PQUEUE32_H_
3 
4 #include "gft_common.h"
5 
6 namespace gft{
7  namespace PQueue32{
8 
9  typedef struct _pqnode {
10  int next;
11  int prev;
12  char color;
13  } PQNode;
14 
15  typedef struct _pqdoublylinkedlists {
17  int nelems;
18  int *value;
20 
21  typedef struct _pqcircularqueue {
22  int *first;
23  int *last;
24  int nbuckets;
25  int minvalue;
26  int maxvalue;
28 
29 
34  typedef struct _priorityqueue {
37  int nadded;
38  } PQueue32;
39 
40 
41  PQueue32 *Create(int nbuckets, int nelems, int *value);
42  void Destroy(PQueue32 **Q);
43  PQueue32 *Grow(PQueue32 **Q, int nbuckets);
44  void Reset(PQueue32 *Q);
45  inline bool IsEmpty(PQueue32 *Q){
46  return (Q->nadded==0);
47  }
48  inline bool IsFull(PQueue32 *Q){
49  return (Q->nadded==(Q->L).nelems);
50  }
51 
52 
56  void InsertElem(PQueue32 **Q, int elem);
60  void RemoveElem(PQueue32 *Q, int elem);
64  void UpdateElem(PQueue32 **Q, int elem, int newvalue);
68  int RemoveMinFIFO(PQueue32 *Q);
72  int RemoveMinLIFO(PQueue32 *Q);
76  int RemoveMaxFIFO(PQueue32 *Q);
80  int RemoveMaxLIFO(PQueue32 *Q);
81 
82 
87  void FastInsertElem(PQueue32 *Q, int elem);
92  void FastRemoveElem(PQueue32 *Q, int elem);
97  void FastUpdateElem(PQueue32 *Q, int elem, int newvalue);
102  int FastRemoveMinFIFO(PQueue32 *Q);
107  int FastRemoveMinLIFO(PQueue32 *Q);
112  int FastRemoveMaxFIFO(PQueue32 *Q);
117  int FastRemoveMaxLIFO(PQueue32 *Q);
118 
119  void FastInsertElemAsFirst(PQueue32 *Q, int elem);
120 
121  } //end PQueue32 namespace
122 } //end gft namespace
123 
124 #endif
125 
126 
int next
Next node.
Definition: gft_pqueue32.h:10
Priority queue by Dial implemented as proposed by A.X. Falcao with circular and growing features...
Definition: gft_pqueue32.h:34
int nbuckets
Number of buckets in the circular queue.
Definition: gft_pqueue32.h:24
int FastRemoveMaxLIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:442
void FastInsertElem(PQueue32 *Q, int elem)
Definition: gft_pqueue32.cpp:300
void Reset(PQueue32 *Q)
Definition: gft_pqueue32.cpp:77
bool IsEmpty(PQueue32 *Q)
Definition: gft_pqueue32.h:45
struct gft::PQueue32::_priorityqueue PQueue32
Priority queue by Dial implemented as proposed by A.X. Falcao with circular and growing features...
Definition: gft_pqueue32.h:9
int nelems
Total number of elements.
Definition: gft_pqueue32.h:17
PQueue32 * Create(int nbuckets, int nelems, int *value)
Definition: gft_pqueue32.cpp:8
int RemoveMinFIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:268
Definition: gft_pqueue32.h:21
int prev
Previous node.
Definition: gft_pqueue32.h:11
PQueue32 * Grow(PQueue32 **Q, int nbuckets)
Definition: gft_pqueue32.cpp:49
PQNode * elem
All possible doubly-linked lists of the circular queue.
Definition: gft_pqueue32.h:16
int maxvalue
Maximum value of a node in queue.
Definition: gft_pqueue32.h:26
void InsertElem(PQueue32 **Q, int elem)
Definition: gft_pqueue32.cpp:94
Header file for common definitions and function prototypes.
int * last
List of the last elements of each doubly-linked list.
Definition: gft_pqueue32.h:23
int RemoveMaxLIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:292
int FastRemoveMaxFIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:435
void FastUpdateElem(PQueue32 *Q, int elem, int newvalue)
Definition: gft_pqueue32.cpp:371
void FastRemoveElem(PQueue32 *Q, int elem)
Definition: gft_pqueue32.cpp:346
int RemoveMaxFIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:284
PQDoublyLinkedLists L
Definition: gft_pqueue32.h:36
Definition: gft_pqueue32.h:15
void UpdateElem(PQueue32 **Q, int elem, int newvalue)
Definition: gft_pqueue32.cpp:162
int minvalue
Minimum value of a node in queue.
Definition: gft_pqueue32.h:25
int nadded
Number of elements added.
Definition: gft_pqueue32.h:37
int FastRemoveMinLIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:428
void FastInsertElemAsFirst(PQueue32 *Q, int elem)
Definition: gft_pqueue32.cpp:322
PQCircularQueue C
Definition: gft_pqueue32.h:35
char color
WHITE=0, GRAY=1, BLACK=2.
Definition: gft_pqueue32.h:12
void RemoveElem(PQueue32 *Q, int elem)
Definition: gft_pqueue32.cpp:129
struct gft::PQueue32::_pqnode PQNode
void Destroy(PQueue32 **Q)
Definition: gft_pqueue32.cpp:36
struct gft::PQueue32::_pqdoublylinkedlists PQDoublyLinkedLists
int FastRemoveMinFIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:421
int RemoveMinLIFO(PQueue32 *Q)
Definition: gft_pqueue32.cpp:276
bool IsFull(PQueue32 *Q)
Definition: gft_pqueue32.h:48
int * first
List of the first elements of each doubly-linked list.
Definition: gft_pqueue32.h:22
struct gft::PQueue32::_pqcircularqueue PQCircularQueue
int * value
The value of the nodes in the graph.
Definition: gft_pqueue32.h:18