Eingabe für Listen in C

Aufrufe: 1267     Aktiv: 09.02.2020 um 16:48

0

Hallo liebe Informatikfreunde. Ich bin gerade damit beschäftigt herauszufinden wie man etwas in Listen einfügt (in C). Habe nichts im Inet gefunden. Vorwissen: Ich weiß wie man eine einfach verkettete Liste erstellt und mehrere Knoten anhängt xD. Frage: Wahrscheinlich muss man ja mit scanf einlesen und die eingegebene ZAhl auf eine Variable speichern (also so wie immer) und dann mit einem pointer in die Liste an sich einfügen. Jedoch frage ich mich jetzt woher ich die ganzen Variablen bekomme. Wie kann ich den Vorgang wiederholen ohne neue Variablen erstellen zu müssen?

z.B. node-> data=n
Hier zeige ich auf die Struktur mit data in der liste vom Typ integer und übergebe den Wert n (den ich zuvor mit einem Scanf bekommen habe). Muss ich eine neue Variable erstellen, wenn ich eine erneute eingabe im Programm haben möchte? Ich möchte ja den nächsten Wert hinten anhängen oder ist das Irrelevant, weil die Speicheradresse neu erzeugt wird? Ich habe einfach noch nicht genug von den Listen verstanden :(

Ich freue mich auf eure Antworten. Vielen Grüße Lori

Diese Frage melden
gefragt

Student, Punkte: 15

 
Kommentar schreiben
1 Antwort
0

Hallo Lori, eigentlich alles richtig erkannt. Für jedes neue Listenelement brauchst Du eine neue Variable. Da die Listen einfach oder doppelt verkettet sind bietet sich immer eine Strukturdefinition an. Z.B.

typedef struct MeineListe

{

struct MeineListe *NaechstesElement;

int WertDesElements; // Was Du halt brauchst.

} MeineListe;

Nun brauchst Du noch einen globalen Anker an dem alles aufgehängt wird. Z.B.

MeineListe *GlobalerAnker = NULL; // NULL, nur damit initialisiert ist.

Wenn Du ein Element einfügen willst besorgst Du einfach mit calloc() (oder malloc()) Speicher für die Struktur. calloc() finde ich immer besser weil Du dann sicher weißt, dass alle Elemente 0 sind.

MeineListe *NeuesElement = calloc(sizeof(MeineListe),1);

Damit hast Du auch den Platz für deinen Wert bekommen. Den kannst Du nun mit scanf() füllen.

Um das Element einzufügen hängst du es bei einer einfach verketteten Liste am einfachsten vorne rein und zwar so:

NeuesElement->NaechstesElement = GlobalerAnker;

GlobalerAnker=NeuesElement;

Fertig ist die einfach verkettete Liste. Wenn Du ein Element suchst beginnst Du einfach bei GlobalerAnker und hangelst Dich über NaechstesElement weiter bis zum gesuchten Element oder bis bei NaechstesElement = NULL ist. Dann ist die Kette zu Ende. Hoffe es hilft. Gruß jobe

Diese Antwort melden
geantwortet

Sonstiger Berufsstatus, Punkte: 505

 

Kommentar schreiben