#include #include using namespace std; /* Struktur eines Listenelements */ struct FloatListElem { float data; FloatListElem *pNext; }; /* Liste ausgeben mit gegebener Genauigkeit */ void fl_print(FloatListElem * const pAnchor, int precision=2) { // Hilfszeiger auf den Anker (Beginn) der Liste FloatListElem *pHelp = pAnchor; int i=0; // Anzahl Nachkommastellen festlegen cout.precision(precision); // Liste bis zum Ende durchlaufen while(pHelp != NULL) { // nach 3 Zahlen einen Zeilenumbruch if(i%3 == 0 && i>0) cout << endl; // Darstellung im 15 Zeichen breiten Spalten // und in Gleitpunktdarstellung cout << setw(15) << fixed << pHelp->data; // naechstes Element betrachten pHelp = pHelp->pNext; i++; } if(i==0) cout << "Noch keine Elemente in der Liste!"; cout << endl; } /* komplette Liste leeren */ void fl_delete(FloatListElem *& pAnchor) { // Hilfszeiger auf den Anker (Beginn) der Liste FloatListElem *pHelp = pAnchor; // Liste bis zum Ende durchlaufen while(pHelp != NULL){ // Zeiger auf zu löschendes Element definieren FloatListElem *pDelete = pHelp; // naechstes Element betrachten pHelp = pHelp->pNext; // altes Element loeschen delete pDelete; } // Anker zurueck auf NULL setzen (leere Liste) pAnchor = NULL; } /* einen Wert an die Liste fuegen */ void fl_append(FloatListElem *& pAnchor, float data) { // Hilfzeiger auf das Ende der Liste (erst auf Anfang) FloatListElem *pLast = pAnchor; // wenn Liste leer, dann neu initialisieren und Anker setzen if(pLast == NULL){ pAnchor = new FloatListElem; pAnchor->data = data; pAnchor->pNext = NULL; // andernfalls neues Listenelement erzeugen und anhaengen } else { // an das Ende der Liste springen while(pLast->pNext != NULL) pLast = pLast->pNext; // neues Element erzeugen... FloatListElem *pNew = new FloatListElem; pNew->data = data; pNew->pNext = NULL; // und an das Ende haengen pLast->pNext = pNew; } } /* Element mit gegebenem Wert suchen und Zeiger auf Ergebnis zurueckliefern */ FloatListElem * fl_search(FloatListElem * const pAnchor, float data) { // Suchzeiger definieren FloatListElem *pSearch = pAnchor; // Liste durchsuchen bis zum Ende if(pSearch != NULL){ // erstes Element ist gesuchtes Element if(pSearch->data == data) return pSearch; // eines der anderen Elemente ist gesuchtes while(pSearch->pNext != NULL) { pSearch = pSearch->pNext; if(pSearch->data == data) return pSearch; } } // wenn nichts gefunden, dann NULL zurueckgeben return NULL; }; /* Hauptprogrammfunktion */ int main() { // Zeiger auf FloatListElem definieren FloatListElem *fl = NULL; // Liste mit 0.0 bis 5.0 fuellen for(float i=0; i <= 5.0; i=i+0.5) fl_append(fl,i); // Liste mit Genauigkeit 2 ausgeben fl_print(fl,2); // Element suchen und Wert zum Test ausgeben FloatListElem* search = fl_search(fl,4.5); // endl <=> '\n' if(search != NULL) cout << endl << search->data << endl; // Liste freigeben fl_delete(fl); }