Verkettete Listen weiß jemand die Antwort?

2 Antworten

removeFirst und isEmpty kann offensichtlich in kons. Zeit ausgeführt werden.
Kann nur entweder size sein oder clear...
Wenn du die größe der verketten Liste wissen willst...also mit size...müsstest du durch die ganze Liste gehen..und das braucht O(n) zeit...
Bei clear bin ich mir da nicht mehr so sicher...^^

Woher ich das weiß:Studium / Ausbildung

size & clear

size aber nur wenn kein counter verwendet wird.


halfcastboi97 
Fragesteller
 11.06.2021, 15:34

Es kann leider nur eins ausgewählt werden

ich mal von clear aus?

0
halfcastboi97 
Fragesteller
 11.06.2021, 15:36
@Klawutzel

danke dir

kannst du dir evt noch meine anderen fragen ansehen

0
DinoMath  11.06.2021, 16:01
@Klawutzel

clear kann in konstanter Zeit ausgeführt werden, wenn Garbage Collector aktiv ist =D

0
Klawutzel  11.06.2021, 16:05
@DinoMath

Nein.

Selbst wenn GC verwendet wird, muss jedes einzelne Glied zur Speicherfreigabe bei GC registriert werden.

Das bedeutet, eine nicht konstante Anzahl an Befehlen muss aufgeführt werden und die Laufzeit ist Linear zur Anzahl an Gliedern in der Kette.

0
DinoMath  11.06.2021, 16:08
@Klawutzel

aber das macht dann nicht dein Programm, oder? auf jeden Fall nicht beim löschen. Vielleicht beim allokieren.

beim Löschen muss man selbst nur Anfang und Ende auf null setzen und das Wars. Der Rest macht der GC.

Kann aber schon sein, dass die Arbeit nicht einfach ignoriert wird, nur weil sie ein Anderer macht^^

0
Klawutzel  11.06.2021, 16:16
@DinoMath

Ich könnte mir vorstellen, dass man eine intelligente Garbage Collection schreiben könnte, welche eine Callback anstatt einer Blockadresse beim Freigeben übernimmt.

Sobald CPU Zeit verfügbar ist, wird die übergebene Callback aufgerufen, wo man das Freigeben aller Kettenelemente durchführt.

Man übergibt also praktisch die gesamte Kette an die GC und definiert den Freigabemechanismus.

0
Klawutzel  11.06.2021, 16:18
@DinoMath

Performancetechnisch würde das Sinn machen, wenn die .clear oft gebraucht wird ^^

0
luerker  11.06.2021, 16:23

clear kann in konstanter Zeit da es schlicht ein Löschen des Pointers ist ;) bzw first auf Null setzen. Glaub nicht das die hier bedenken das jedes der Teil Elemente auch noch einzeln gelöscht werden muss..

0
Klawutzel  11.06.2021, 16:28
@luerker

Ich hätte sonst ja die .size empfohlen, aber ich bin davon ausgegangen, dass ein Programmierer, der bei klaren Verstand ist, nicht die Elemente durchgeht und zählt. Natürlich macht man, falls das benötigt wird einen Zähler.

0
luerker  11.06.2021, 16:39
@Klawutzel

hmmm glaub durchaus das in den meisten Fällen kein Zähler eingesetzt wird. Wer hält sonst den Zähler das erste Element wenn du bei dem bist weiß du doch noch gar nicht ob das Einfügen Erfolg hatte. Alle Elemente damit machst du das einfügen ja noch langsamer ...

0
Klawutzel  11.06.2021, 16:44
@luerker

Ich meine, die Klasse selber hat einen Integer Member welcher die Anzahl an Gliedern in der Kette zählt.

0
luerker  11.06.2021, 17:04
@Klawutzel

also jedes Item? meine Listen haben keine Headklassen ;)

0
Klawutzel  11.06.2021, 17:05
@luerker

Verstehe.

Aber sobald die .size benötigt wird, zählt man für gewöhnlich einfach die Elemente beim Einfügen, damit man das effizient abfragen kann.

0