Abstrakte Datentypen
-
Hehe okay, genauso eine Anleitung für Vollidioten(<-hier: ICH!!!) hba ich gesucht! Vielen Dank! Jetzt wird langsam der Dimmer hochgedreht und es wird heller
-
Achwas, sieh das nicht so pessimistisch.
Das ganze in nunmal ziemlich abstrakt und das mit der grafischen Darstellung sehr gut geeignet, um sich das ganze etwas klar zu machen.
Ein ganz normaler Vorgang
-
Okay, klappt soweit.
Wie kann ich denn jetzt, an obigem Beispiel:
1. Das erste Element löschen
2. Das letzte Element löschen
3. Ein beliebiges Element der Liste löschen? Also zum Beispiel die dritte Eingabe oder die Zahl 5(die ich vorher eingegeben habe)?
4. Anzahl der Listenelemente bestimmen
5.Datensatz an best. Position finden?
6. Einfügen an vorgegebener Position?Ich weiss ich weiss, ich nerv euch... Seid aber meine einzige Hilfe
-
jetz waer ne runde lisp nicht schlecht. da sind alle (normalen) listen verkettete listen.
ein element ist ein paar. es hat 2 "faecher", car (wert) und cdr (naechstes) genannt.
int length(Pair *s) { if (!s) return 0; else return 1 + length(s->next); } (define (length s) (if (null? s) 0 (+ 1 (length (cdr s)))))
umformung nach C mit pointern sei dir ueberlassen.
dass lineare rekursion aequivalent zu iteration ist, sollte dir bekannt sein.
deine aufgabe ist es, diese linear rekursive funktion in eine explizit iterative zu verwandeln.
-
Also ich hab ma einen weiteren Zeiger namens *zeiger erstellt und das so versucht!
struct zahlen *zeiger;
nach der do-schleife dann:
zeiger = start->next;
free(start);
start = zeiger;komischerweise ist der erste wert aber immernoch in der ausgabe drin...
Und noch ne Frage.
Gibts einen einfachen Befehl um die komplette Liste zu löschen? Also ohne dass ich die zeiger von element zu element springen lassen muss um sie einzeln auszulösen und mit free freizugeben?
-
Was ist bei dir der erste Wert ? Der nicht initialisierte Datenmüll in der ersten Struktur oder der erste von Dir eingegebene Wert ?
Naaahaaa ??
-
du musst die liste selber loeschen. machs einfach und stell dich nicht so an.
-
Onyx schrieb:
komischerweise ist der erste wert aber immernoch in der ausgabe drin...
Noch einmal:
Was ist bei dir der erste Wert ? Der nicht initialisierte Datenmüll in der ersten Struktur oder der erste von Dir eingegebene Wert ?Onyx schrieb:
Und noch ne Frage.
Gibts einen einfachen Befehl um die komplette Liste zu löschen? Also ohne dass ich die zeiger von element zu element springen lassen muss um sie einzeln auszulösen und mit free freizugeben?Nein.
Wären es z.B. 10 erzeugte Strukturen mit malloc:
start = malloc( 10 * sizeof( struct liste ) );
Dann wäre es ein im Arbeitsspeicher zusammenhängender Block und ein free(start)
würde den reservierten Speicher der 10 Strukturen wieder freigeben.Hier sind die Strukturen sind im Arbeitsspeicher jedoch 'verstreut'. Nur start kennt die erste Struktur und jede next Variable kennt die Adresse der nächsten Struktur im Arbeitsspeicher.
Also bleibt nichts anderes übrig, als von Zeiger zu Zeiger zu hüpfen.
Generell gilt die Regel:
für jedes malloc ein free
-
Na der erste eingegebene Wert!
-
Und das wundert dich jetzt ?