Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi!

Ich befinde mich in der Ausbildung zu Fachinformatiker/Anwendungsentwicklung.

Mein Ausbilder hat mir eine Aufgabe gestellt, in der es um verkettete Listen geht. (C++)

Leider habe ich davon keine Ahnung. Ich weiß nur, dass das was mit Pointern zu tun hat.

Kennt sich jemand damit aus?

Danke schonmal!

Geschrieben

Na du bist lustig :D

Du schreibst hier zwar was, aber eigentlich hast du keine wirkliche Frage gestellt.

Also ueberleg dir doch mal ob du irgendwas genaues wissen willst.

Auf deine bisherige Frage kannst ja hoechstens Antworten wie ja und nein bekommen, aber das hilft dir wohl nicht weiter :)

Goos

Geschrieben

Wie waers denn, wenn wir es andersrum machen?

Einfach irgendein Beispiel ist wohl schwierig :)

Du koenntest ja mal die Aufgabe Posten die du gestellt bekommen hast, oder zumindest einen Teil davon, oder alternativ kannst doch auch einfach mal versuchen die Aufgabe zu lösen und dich dann hier wieder melden, wenns irgendwo haengt.

Goos

Geschrieben

Schön, dass ihr Beispiele mailt, aber es gibt noch andere, die das nicht verstehen (bei mir hat's Monate gedauert)

Nehmen wir mal die Datenstruktur Person:

typedef struct s_person

{

char name[50];

};

Da wird jetzt mal ein Rahmen drum rumgebastelt:

typedef struct s_person_liste

{

s_person data;

s_person_liste *next;

};

next ist ein Pointer, der immer auf das darauffolgende Objekt zeigt

So, definiert wird das Ganze im Programm dann so:

void main (void)

{

s_person_liste *Liste;

Liste = NULL;

...

}

Das NULL ist wichtig, da man sonst nicht überprüfen kann, ob man am Ende der Liste ist.

Um ein Objek ranzuhängen kommt iene Funktion wie diese (Rekursiv sieht's geiler aus, versteht aber kein Schwein auf anhieb)

void anhaengen (char *Name, s_person_liste *L)

{

s_person_liste *P = L;

while ( P->next != NULL) // finden des letzten elements

{

P = P->next;

}

P->next = new s_person_liste;

P=P->next;

strcpy((char *)P->Data.Name, Name); // anhängen der Daten

P->next = NULL; // terminieren der Liste

}

so, nun fehlt noch das Löschen. Hierzu muss erst das Objekt gesucht werden. anschließend merken wir uns dessen Nachfolger und klemmen den an den Vorgänger an, damit die Liste vollständig bleibt. Dann kann man das Objekt löschen:

void loeschen (char *Name, s_person_liste *L)

{

char found =0

s_person_liste *P, *N;

P = L;

N = P;

while (! found)

{

if (strcmp(Name,(char *)P->Name != 0)

{

N = P; // N hängt immer 1 Element hinter P

P = P->next;

}

else if (P = NULL) found = 2;

else found = 1;

} // Name gefunden oder auch nicht..

if (found == 1)

{

N->next = P->next; // Zeiger umbiegen

delete P; // P löschen

}

}

So, das wär's eigentlich. das Suchen von Elementen ist in der Löschfunktion ja schon mit drin.

Allerdings hab ich den Code nicht durchtesten können. somit sind alle Angaben ohne Gewehr!

Sowas sollte übrigens in der FAQ stehen...

cYa

DjR

Geschrieben

@Goos: Wir sind hier im C/C++-Forum. Und void main ( void ) ist kein C/C++! Es ist also nicht OT. Und es sollte wirklich jeden interessieren, daß er richtigen Code schreibt und das in jedem Thread.

@DocJunioR: Meine Bemerkung sollte eigentlich auch nur am Rande erscheinen und sollte nichts an Deiner Lösung schmälern. Eine Frage hätte ich aber doch:

Aber mal abgesehen davon, dass ich seltenst Kommandozeilenparameter benutze,...

Es hat nichts mit Kommandozeilenparametern zu tun. int main (void) ist sehr wohl Standard. Ich bezog mich auf das erste void (void main (void)). Der Standard sagt, man muß einen int zurückliefern.

Jan

Geschrieben

So, nun kommt aber wieder zum Thema zurück. Die Diskussion, ob void main (Jehova!) OnT ist oder nicht, hat nichts mit verketteten Listen zu tun.

Noch zwei Hinweise zu verketteten Listen aus eigener Erfahrung:

- Es ist allgemein einfacher, neue Elemente vorn anzuhängen.

- beim Zugriff aus mehreren Prozessen/Threads muss man bei vL besondere Vorsicht walten lassen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...