update ana, add ipi7
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user