Klassen - Verkettete Liste - Aufgabenstellung: Liste aller Erstsemester beliebig lange Liste (statische <-> dynamische Länge) verkettete Liste Programmierung 2 FH Bingen
Klassen - Liste - Graphische Darstellung Programmierung 2 FH Bingen
Verkettete Liste I class Liste { private: struct listelem int value; listelem *next; }; listelem *top, *bottom; public: Liste (); bool is_empty(); void append (int); void print(); bool seek(int); void remove(int); Programmierung 2 FH Bingen
Verkettete Liste II Liste::Liste() { top = bottom = NULL; } Programmierung 2 FH Bingen
Verkettete Liste III bool Liste::is_empty () { if (top == NULL) return true; else return false; } Programmierung 2 FH Bingen
Verkettete Liste IV void Liste::append (int value = 0) { listelem *temp = new listelem; if ( !is_empty()) bottom->next = temp; bottom = temp; bottom->value = value; bottom->next = NULL; } else top = bottom = temp; top->value = value; top->next = NULL; Dynamische Speicher-Allokierung Programmierung 2 FH Bingen
Verkettete Liste V void Liste::print() { int i = 1; listelem *actual = top; if ( !is_empty ()) do cout << i <<". Entry: " << actual->value << endl; i++; } while ( (actual = actual->next) != NULL); else cout << "List is empty!!!!!!" << endl; cout << endl; Programmierung 2 FH Bingen
Verkettete Liste VI bool Liste::seek (int value) { listelem *actual = top; if (!is_empty()) do if (value == actual->value) return true; while ( (actual = actual->next) != NULL); } return false; Programmierung 2 FH Bingen
Verkettete Liste VII void Liste::remove (int value) { if (!is_empty()) if (top->value == value) listelem *temp = top->next; if (bottom == top) bottom = NULL; delete top; top = temp; }
Verkettete Liste VII (cont.) else { listelem *actual = top->next; listelem *pre = top; do if (value == actual->value) pre->next = actual->next; if (actual == bottom) bottom = pre; delete actual; break; } pre = actual; actual = actual->next; while (actual!= NULL); Programmierung 2 FH Bingen
Programmierung 2 FH Bingen Verkettete Liste VIII void main () { char dummy; Liste intlist; intlist.print(); cout << intlist.seek(37) << endl << endl; intlist.append(3); intlist.remove(3); intlist.append(2); cout << intlist.seek (37) << endl << endl; intlist.append(7); intlist.append(37); intlist.remove(37); intlist.append(5); intlist.append(); intlist.remove(5); cin >> dummy; } Programmierung 2 FH Bingen
Programmierung 2 FH Bingen 1. Übungsblatt 1. Aufgabe Entwerfen sie eine Klasse complex, die das Rechnen mit komplexen Zahlen realisieren soll. Denken Sie über Konstruktoren nach! Wie kann man Operator-Overloading sinnvoll einsetzen? 2. Aufgabe Entwerfen und implementieren Sie eine Klasse zur Rechnung mit rationalen Zahlen (Bruchrechnung)! a) Zähler und Nenner sind ganzzahlig. b) der Konstruktor soll den Bruch initialisieren, die interne Darstellung des Bruchs soll Zähler und Nenner teilerfremd darstellen. Hinweis : Wenden Siedie Lösung der 3. Aufgabe an. c) die Klasse soll Methoden zur Realisierung der Grundrechenarten enthalten. d) eine Methode gleich soll die Gleichheit eines Bruchs mit einem vorgelegtem entscheiden. Hinweis: a/b = c/d genau dann, wenn a*d = b*c. e) es soll eine Methode print zum Ausdruck des Bruchs zur Verfügung stehen. 3. Aufgabe Berechnen sie den größten, gemeinsamen Teiler ggT(a,b) zweier, positiver, ganzer Zahlen a und b. Entwickeln Sie aus der Beziehung ggT(a,b) = ggT(a%b, b) für a > b (auch bekannt als Euklidischer Algorithmus) eine rekursive Funktion. Programmierung 2 FH Bingen