85 lines
2.0 KiB
C++
85 lines
2.0 KiB
C++
#include<stdio.h>
|
|
#include<cstdlib>
|
|
|
|
// Ein Queue Element
|
|
struct QueueElem {
|
|
QueueElem* next; // Zeiger auf nächstes Element
|
|
QueueElem* previous; // Zeiger auf vorheriges Element
|
|
int value; // Daten zu diesem Element
|
|
} ;
|
|
|
|
// Eine Queue
|
|
struct Queue {
|
|
int count; // Anzahl Elemente in der queuee
|
|
QueueElem* first; // Zeiger auf erstes Element der queue
|
|
QueueElem* last; // Zeiger auf letztes Element der queue
|
|
} ;
|
|
|
|
|
|
// Initialisiere eine queue
|
|
void empty_queue (Queue* l)
|
|
{
|
|
l->first = 0; // 0 ist keine gueltige Adresse: queue ist leer
|
|
l->last = 0;
|
|
l->count = 0;
|
|
}
|
|
|
|
// Fuege neues Element am Ende der Schlange ein
|
|
void add_to_queue(Queue* queue, QueueElem* elem)
|
|
{
|
|
if (queue->last == 0) {
|
|
queue->first = elem;
|
|
queue->last = elem;
|
|
} else {
|
|
queue->last->next = elem;
|
|
elem->next = 0;
|
|
elem->previous = queue->last;
|
|
queue->last = elem;
|
|
}
|
|
queue->count = queue->count + 1;
|
|
}
|
|
|
|
// Remove last Element from queue and return it
|
|
QueueElem* remove_from_queue (Queue* queue)
|
|
{
|
|
if (queue->first == 0) {
|
|
return 0; // return null if queue is empty
|
|
}
|
|
QueueElem* p;
|
|
p = queue->first;
|
|
queue->first = p->next;
|
|
queue->count = queue->count -1;
|
|
return p;
|
|
}
|
|
|
|
// print a queue
|
|
void print_queue(Queue* queue) {
|
|
// index pointer
|
|
QueueElem* current = queue->first;
|
|
printf("Queue: ");
|
|
// print every element until the last
|
|
while (current != 0) {
|
|
printf("%d ", current->value);
|
|
current = current->next;
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
int main() {
|
|
// create a queue
|
|
Queue* queue = new Queue();
|
|
empty_queue(queue);
|
|
// and some elements
|
|
for (int i = 0; i < 100000; i++) {
|
|
QueueElem* elem = new QueueElem();
|
|
elem -> value = rand();
|
|
add_to_queue(queue, elem);
|
|
}
|
|
// and remove them again
|
|
for (int i = 0; i < 100000; i++) {
|
|
remove_from_queue(queue);
|
|
}
|
|
// check if queue is empty
|
|
print_queue(queue);
|
|
}
|