Files
uni/ws2019/ipi/uebungen/queue_einfach.cpp
T
2019-12-11 02:14:21 +01:00

84 lines
2.2 KiB
C++

#include<stdio.h>
#include<cstdlib>
// Ein Schlangenelement
struct QueueElem {
QueueElem* next; // Zeiger auf nächstes Element
int value; // Daten zu diesem Element
} ;
// Eine Schlange
struct Queue {
int count; // Anzahl Elemente in der Liste
QueueElem* first; // Zeiger auf erstes Element der Liste
} ;
// Initialisiere eine Schlange
void empty_queue (Queue* l)
{
l->first = 0; // 0 ist keine gueltige Adresse: Liste ist leer
l->count = 0;
}
// Fuege ein Element ans Ende der Schlange an
void add_to_queue (Queue* queue, QueueElem* elem)
{
// Laufpointer
QueueElem* current = queue->first;
if (queue->first == 0) { // if queue is empty, put the new element as the first one
queue->first = elem;
return;
}
// find last element of list
while (current->next != 0) {
current = current->next;
}
current->next = elem; // set new element as the follower of the old last one
queue->count = queue->count + 1; // increment queue size
}
// Entferne das erste Element der Schlange
QueueElem* remove_from_queue(Queue* queue)
{
QueueElem* p; // das entfernte Element
if (queue->first == 0) { // check if list is empty
return p; // then just return null pointer
} else {
p = queue->first; // return the first element of the queue
queue->first = p->next; // set the second to be the new first
queue->count = queue->count-1; // decrement queue size
return p; // return the removed element
}
}
// 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);
}