16.09.2017 Aufrufe

Vorkurs Informatik

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

14.3 Mengenverwaltung mit sortiertem Array 237<br />

Wert des letzten Elements der Menge an die Stelle geschrieben wird, an der das zu entfernende<br />

Element steht. Dies geschieht im Rumpf der bedingten Anweisung. Das letzte relevante Element<br />

hat den Index fuellstand − 1. Nach der Zuweisung wird der Wert von fuellstand um 1 reduziert,<br />

da nun das letzte Element nicht mehr relevant ist. Damit wird die Menge um 1 verkleinert.<br />

Der Algorithmus entferne funktioniert, weil wir beim Einfügen dafür gesorgt haben, dass ein<br />

Wert nur einmal in einer Menge gespeichert wird.<br />

Für das Suchen nach s in der Menge werden wiederum O(n) Operationen benötigt. Die darauf<br />

folgende bedingte Anweisung benötigt nur konstant viele Operationen, sodass der Gesamtzeitaufwand<br />

für das Entfernen T(n)=O(n) beträgt.<br />

Aufgabe 14.2:<br />

Wir nehmen für diese Aufgabe an, dass im Algorithmus fuegeEin der Aufruf von suche in der bedingten<br />

Anweisung nicht vorhanden ist. Es kann also passieren, dass Zahlen im Array auch mehrfach enthalten sind.<br />

Unter dieser Annahme arbeitet der Algorithmus entferne im Allgemeinen nicht korrekt, da er nur das erste<br />

Auftreten von s berücksichtigt. Schreiben Sie einen neuen Algorithmus entferne, der bei der Entfernung<br />

einer Zahl s dafür sorgt, dass s überhaupt nicht mehr im Array vorhanden ist.<br />

Aufgabe 14.3:<br />

Schreiben Sie eine Java-Klasse UnsortArraySetAdmin, die es erlaubt, Objekte zur Verwaltung von Mengen<br />

zu instantiieren, und die dieses nach dem Prinzip der unsortierten Arrays realisiert.<br />

a) Die Klasse hat das Array, das die Daten aufnimmt, und die int-Variable fuellstand als Attribut. Sie<br />

soll die Methoden<br />

• boolean suche(int s)<br />

• boolean fuegeEin(int s)<br />

• boolean entferne(int s)<br />

zur Verfügung stellen. Der Rückgabewert von fuegeEin und entferne soll angeben, ob s tatsächlich<br />

eingefügt beziehungsweise s tatsächlich entfernt werden musste. Ferner soll sie einen Konstruktor<br />

haben, der eine maximale Mengengröße int maxn als Parameter hat. Der Konstruktor soll das<br />

Attribut-Array als Array der Länge maxn instantiieren und die Variable fuellstand auf 0 setzen.<br />

b) Schreiben Sie ein Testprogramm SetAdminProgramm, das außer der Klasse UnsortArraySet-<br />

Admin noch ein Hauptprogramm anbietet. In dem Hauptprogramm soll ein Objekt eineMenge deklariert<br />

und instantiiert werden, einige Zahlen s in eineMenge eingefügt, die gleichen Zahlen und<br />

andere dann gesucht und das Suchergebnis („gefunden“, „nicht gefunden“) jeweils ausgegeben<br />

werden.<br />

14.3 Mengenverwaltung mit sortiertem Array<br />

Wie Abbildung 14.3 zeigt, sieht die Datenstruktur der Lösung mit sortiertem Array grundsätzlich<br />

genauso aus wie die der Lösung mit unsortiertem Array. Ein wesentlicher Unterschied ist jedoch,<br />

dass die Elemente der Menge nun aufsteigend sortiert im Array angeordnet sind. Der kleinste<br />

Wert der Beispielfolge, 3, steht im ersten Array-Element S[0], der größte Wert, 19, im letzten<br />

relevanten Array-Element, S[10].

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!