/* queue.c -- Matthias Jauernig, 08.01.04 */ /* Implementation einer rudimentären Schlange mit ihren Funktionen */ #include #include /* -- Struktur für ein Queue-Element deklarieren -------------------------------------- */ typedef struct QUEUE { double elem; struct QUEUE *next; } queue; /* -- empty() -- legt eine leere queue an --------------------------------------------- */ inline queue *empty(void){ return NULL; } /* -- isempty() -- prüft, ob eine queue leer ist und gibt entsprechenden Wert zurück -- */ inline char isempty(queue *qe){ return qe?0:1; } /* -- head() -- gibt den Wert des Kopfes der queue zurück ----------------------------- */ double head(queue *qe){ if(isempty(qe)){ printf("!! head() -- Schlange ist leer!\n"); exit(1); }else return qe->elem; } /* -- tail() -- löscht den Kopf, liefert somit die Adresse des nächsten queue-Elements */ queue *tail(queue *qe){ if(isempty(qe)){ printf("!! tail() -- Schlange ist leer!\n"); exit(1); }else{ queue *h=qe->next; free(qe); return h; } } /* -- append() -- hängt ein Element an die queue an und gibt den aktuellen Kopf zurück */ queue *append(double zahl, queue *qe){ queue *tmp=qe, *h=(queue *)malloc(sizeof(queue)); h->elem=zahl; h->next=NULL; if(isempty(tmp)) return h; while(tmp->next) tmp=tmp->next; tmp->next=h; return qe; } /* -- freigeben() -- gibt den Speicherplatz der queue wieder frei --------------------- */ inline void freigeben(queue *qe){ while(qe) qe=tail(qe); } /* ---- main() ------------------------------------------------------------------------ */ int main(void){ queue *qe=empty(); //lege eine neue queue an, qe zeigt stets auf deren Kopf double zahl; // Testen einiger Aufrufe, um die Korrektheit der Funktionen zu prüfen printf( "Testlauf für die Schlange\n" "-------------------------\n\n"); zahl=18.74536; printf("append(%g)...\n", zahl); qe=append(zahl, qe); printf("head()=%g\n", head(qe)); printf("tail()...\n"); qe=tail(qe); printf("Schlange ist %sleer!\n", isempty(qe) ? "" : "nicht "); zahl=1234.56789; printf("append(%g)...\n", zahl); qe=append(zahl, qe); zahl=-19.2837465; printf("append(%g)...\n", zahl); qe=append(zahl, qe); printf("head()=%g\n", head(qe)); printf("tail()...\n"); qe=tail(qe); printf("head()=%g\n", head(qe)); printf("Schlange ist %sleer!\n", isempty(qe) ? "" : "nicht "); freigeben(qe); return 0; } /* Ausgabe für die Testaufrufe in main() Testlauf für die Schlange ------------------------- append(18.7454)... head()=18.7454 tail()... Schlange ist leer! append(1234.57)... append(-19.2837)... head()=1234.57 tail()... head()=-19.2837 Schlange ist nicht leer! */