APPFS
Advanced practical programming for scientists
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Typedefs | Functions
queue.h File Reference

Queue Implementierung. More...

#include <stdbool.h>

Go to the source code of this file.

Typedefs

typedef struct queue Queue
 

Functions

Queuequeue_new (int size)
 Erzeugt eine neue Queue. More...
 
void queue_free (Queue *queue)
 Gibt eine Queue wieder frei. More...
 
void queue_put (Queue *queue, int element)
 Hängt eine neues Element an das Ende der Queue an. More...
 
int queue_get (Queue *queue)
 Holt das vordersten Element aus der Queue heraus. More...
 
bool queue_is_empty (const Queue *queue)
 Stellt fest, ob eine Queue leer ist. More...
 

Detailed Description

Author
Thorsten Koch
Id:
queue.h,v 1.2 2004/05/13 12:12:43 bzfkocht Exp

Definition in file queue.h.

Typedef Documentation

typedef struct queue Queue

Definition at line 11 of file queue.h.

Function Documentation

void queue_free ( Queue queue)
Parameters
queueZeiger auf eine Queue

Definition at line 77 of file queue.c.

78 {
79  assert(queue_is_valid(queue));
80 
81  deallocate(queue->elem);
82  deallocate(queue);
83 }
void deallocate(void *p)
Free allocated memory.
Definition: allocate.c:47
static bool queue_is_valid(const Queue *queue)
Definition: queue.c:35
int * elem
Der Vektor mit den Elementen.
Definition: queue.c:29
int queue_get ( Queue queue)
Parameters
queueZeiger auf eine Queue
Returns
Vorderstes Element

Definition at line 115 of file queue.c.

116 {
117  int element;
118 
119  assert(queue_is_valid(queue));
120 
121  if (queue->used == 0)
122  return -1;
123 
124  element = queue->elem[queue->first];
125  queue->first = (queue->first + 1) % queue->size;
126  queue->used--;
127 
128  assert(queue_is_valid(queue));
129 
130  return element;
131 }
int first
Erstes Element der Queue, wird als nächstes gelesen.
Definition: queue.c:27
int used
Aktuelle Anzahl von Elementen in der Queue.
Definition: queue.c:26
static bool queue_is_valid(const Queue *queue)
Definition: queue.c:35
int * elem
Der Vektor mit den Elementen.
Definition: queue.c:29
int size
Maximale Anzahl von Elementen in der Queue.
Definition: queue.c:25
bool queue_is_empty ( const Queue queue)
Parameters
queueZeiger auf eine Queue
Return values
truewenn sich kein Element in der Queue befindet
falsesonst

Definition at line 140 of file queue.c.

141 {
142  assert(queue_is_valid(queue));
143 
144  return queue->used == 0;
145 }
int used
Aktuelle Anzahl von Elementen in der Queue.
Definition: queue.c:26
static bool queue_is_valid(const Queue *queue)
Definition: queue.c:35
Queue* queue_new ( int  size)
Parameters
sizeMaximale Anzahl von Elementen
Returns
Zeiger auf die neue Queue

Definition at line 53 of file queue.c.

54 {
55  Queue* queue;
56 
57  assert(size > 0);
58 
59  queue = allocate(1, sizeof(*queue));
60 
61  queue->size = size + 1;
62  queue->used = 0;
63  queue->first = 0;
64  queue->next = 0;
65  queue->elem = allocate(queue->size, sizeof(*queue->elem));
66 
67  assert(queue_is_valid(queue));
68 
69  return queue;
70 }
int first
Erstes Element der Queue, wird als nächstes gelesen.
Definition: queue.c:27
int next
Letztes Element der Queue, hiernach kommen neue Elemente.
Definition: queue.c:28
int used
Aktuelle Anzahl von Elementen in der Queue.
Definition: queue.c:26
Queue oder FIFO (First In, First Out) Liste.
Definition: queue.c:23
static bool queue_is_valid(const Queue *queue)
Definition: queue.c:35
void * allocate(int elems, int size)
Allocate memory.
Definition: allocate.c:23
int * elem
Der Vektor mit den Elementen.
Definition: queue.c:29
int size
Maximale Anzahl von Elementen in der Queue.
Definition: queue.c:25
void queue_put ( Queue queue,
int  element 
)
Parameters
queueZeiger auf eine Queue
elementDas neue Element

Definition at line 91 of file queue.c.

92 {
93  assert(queue_is_valid(queue));
94 
95  if (queue->used == queue->size - 1)
96  {
97  fprintf(stderr, "Queue overflow size=%d\n", queue->size);
98  abort();
99  }
100  assert(queue->used < queue->size - 1);
101 
102  queue->elem[queue->next] = element;
103  queue->next = (queue->next + 1) % queue->size;
104  queue->used++;
105 
106  assert(queue_is_valid(queue));
107 }
int next
Letztes Element der Queue, hiernach kommen neue Elemente.
Definition: queue.c:28
int used
Aktuelle Anzahl von Elementen in der Queue.
Definition: queue.c:26
static bool queue_is_valid(const Queue *queue)
Definition: queue.c:35
int * elem
Der Vektor mit den Elementen.
Definition: queue.c:29
int size
Maximale Anzahl von Elementen in der Queue.
Definition: queue.c:25