typedef struct MyNode {//Diese Struktur beschreibt den Aufbau eines Elements der Queue MyNode* next; MyNode* prev; int value; } ; typedef struct {//Diese Struktur enthält den Anfang und das Ende einer Queue MyNode* head; MyNode* tail; } MyQueue; void push(int value, MyQueue* queue); //Die Prototypen der Funktionen void pop(MyQueue* queue); void showQueue(const MyQueue* queue); bool isEmpty(const MyQueue* queue); int main() //Beispiel für ein Hauptprogramm { MyQueue queue; MyNode* help; queue.head = queue.tail = NULL; //WICHTIG!!! da sonst kein push bzw. pop möglich ist push(1, &queue); push(2, &queue); push(3, &queue); push(4, &queue); showQueue(&queue); pop(&queue); pop(&queue); showQueue(&queue); return 0; } void push (int value, MyQueue* queue) {//Mit dieser Funktion fügt man ein Element in die Queue ein MyNode* help; //Mithilfe des Hilfezeigers legt man zuerst ein neues Element an und help = (MyNode*) malloc(sizeof(MyNode)); //weist diesem den übergebenen Wert zu help->value = value; if(queue->head == NULL) //Dann fügt man das neue Element am Ende ein queue->head = help; else queue->tail->next = help; help->prev = queue->tail; queue->tail = help; } void pop(MyQueue* queue) {//Mit dieser Funktion wird das erste Element entfernt MyNode* help; help = queue->head; //Den Hilfezeiger auf das erste Element setzten queue->head = queue->head->next; //Beginn um 1 nach hinten verschieben if(queue->head == NULL) queue->tail = NULL; else queue->head->prev = NULL; if(help != NULL) //Prüfung ob überhaupt noch ein Element zum Löschen da ist { //Falls nicht ist "help" ja NULL und es braucht kein Speicher mehr freigegeben werden help->next = NULL; free(help); } } void showQueue(const MyQueue* queue) {//Mit dieser Funktion lassen wir uns unsere Queue anzeigen (einfach durchlaufen und jedes Element ausgeben) MyNode* help = queue->head; while(help != NULL) { printf("%d ", help->value); help = help->next; } printf("\n"); } bool isEmpty(const MyQueue* queue) {//Diese Methode checkt ob sich Elemente in der Queue befindet bool ret = false; if(queue->head == NULL && queue->tail == NULL) ret = true; return ret; }