Einfach verkettete Liste
-
Hi,
Ich habe heute eine verkettete Liste erstellt um den Input in mein Programm zu speicher und nach einem bestimmten Wert sortieren.
Da das einlesen eine Schleife ist welche sich über 4 Funktionen erstreckt muss ich den first Pointer bereits im main NULL setzen damit das Programm weiß wann das erste Element kommt. Meine Struktur heißt List und der next Pointer ist next_.nun übergebe ich meinen Pointer über 4 Funktionen und dann wir geordnet
immter
...fkt1(first);
.
.
int fkt1(List* first)
{
}
.
.
fkt2(first);
.
.
int fkt2(List* first)
{
}
.
.
so runter bis nur 4ten Funktion.
Dort erzeuge ich in einer Schleife Rnd numbers und es wird die Funktion sortMe aufgerufen um nach jeden neueste number bei den bereits vorhanden richtig dranzuhängen.for (count = 0; count < 10; count++)
{
new_id = rand();
sortMe(&first, new_id);
output(first);
}
di funktion sieht so aus:
int sortMe(List **first, int new_id)
..und jetzt würde ich gerne wissen, was ich anders machen muss um meinen first Pointer in den oberen Funktionen wieder verfügbar zu haben. Dank &first im for klappts ja für diese 2 Funktionen und die Output Funktion, aber nicht für die darüber.
Ich hoffe das war halbwegs verständlich erklärt wo mein Problem liegt
Lg
-
Benutze Doppelzeiger wie bei
sortMe
.Du brauchst einen Zeiger auf die Stelle, wo der Zeiger auf List gespeichert ist.
-
d.h immer &first übergeben und als Objects** first übernehmen, das ganze Programm durch ?
lg
-
richard92 schrieb:
d.h immer &first übergeben
Nein
richard92 schrieb:
... und als Objects** first übernehmen
Ja
richard92 schrieb:
..., das ganze Programm durch ?
Jein
Wenn du in fkt1 schon einen Doppelzeiger hast, brachst du beim Aufruf von fkt2 nicht mehr die Adresse ermitteln.
Der Adressoperator kommt nur beim ersten Aufruf des Doppelzeigers zum Einsatz.Wenn du das erste Element einträgst, also first selber ändern willst brauchst du nur ein *
Du musst das schon an den richtigen Stellen anpasssen.
Mit ** kommst du an das Element mit * an den Zeiger...fkt1(&first); . . int fkt1(List** first) { fkt2(first); fkt2alt(*first); // Nur Beispiel } . . . int fkt2alt(List* first) // Nur Beispiel { }. int fkt2(List** first) { }
.
-
danke ich werds mal probieren
lg
-
darf ich dir eventuell den Code schicken?
Ich komm da nicht so wirklich drauf, wenn ich seh wie es aussehen soll versteh ichs ja, nur so wird das glaube ich nichts.lg
-
. o O ( du darfst den Code sogar posten ... )
-
ich kanns hier nicht reinposten, da ich mein Programm ja jetzt schon fertig hab ,bis auf das mit dem übergeben des first pointers, und es auf Duplikate geprüft wird. W enn man mein Programm googlen kann ist das wohl weniger gut
lg
-
richard92 schrieb:
ich kanns hier nicht reinposten, da ich mein Programm ja jetzt schon fertig hab ,bis auf das mit dem übergeben des first pointers, und es auf Duplikate geprüft wird. W enn man mein Programm googlen kann ist das wohl weniger gut
lg
Dann schreib ein ähnliches Programm, bzw. das entsprechende Codefragment, das dein Problem widerspiegelt.