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

Ja aber ich hab halt auch kein Beispiel :)

...das Beispiel hast wohl du als Aufgabe gestellt bekommen.

Mir faellt da auf die schnelle leider auch nix zu ein.

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

Na das is beim Thema verkettete Listen aber very OT find ich....ich glaub nicht, dass das hier in diesem Thread jemanden interessiert. :OD

Goos

Geschrieben

@ Orffi:

Ich gebe zu, du hast recht.

Aber mal abgesehen davon, dass ich seltenst Kommandozeilenparameter benutze, hab ich ja sonst meine heißgeliebten Templates :-)

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.

Geschrieben

*lol*

siehste, ich und meine Templates..

war mir garnicht aufgefallen, dass ich ohne Rückgabewert arbeite..

tja, nobody is perfect, aber ich arbeite dran... :D

cYa

DjR

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...