Zum Inhalt springen

Datenelement bei doppelt verketteten Listen


Kadaj

Empfohlene Beiträge

Hallo,

mir geht grad folgendes Problem durch den Kopf:

Bei einer doppelt verketteten Liste habe ich eine Struktur, die wie folgt aussieht:


typedef struct Cnctr
{
struct Cnctr *pNxt;
struct Cnctr *pPrv;
void *pItem;
}tCnct;

typedef struct
{
tCnct *pFirst;
tCnct *pCurr;
tCnct *pLast;
}tList;


[/PHP]

Diese Struktur steht beispielsweise in einer Datei list.h mit Vorwärtsdeklarationen für die list.c. Dass mein pItem vom Typ void ist, ist ja gewollt, da ich beispielsweise ein Programm mit Telefoneinträgen und später ein Konto-Programm damit schreiben möchte und immer diese Struktur verwenden möchte, ohne sie zu verändern. Nun habe ich in meiner list.c eine Funktion von folgender Struktur:

[PHP] void* addItemToList (tList* pList, void * pItem, int(*fcmp)(void*pItList,void*pItNew));

Nun habe ich aber eine weitere Datei, konto.c zum Beispiel und von mir aus noch ein Konto.h mit den Deklarationen und auch mit meiner Struktur, die ich dem pItem zuweisen möchte. Die könnte so aussehen:


void *addEntry(tList *pList);
[/PHP]

Nun hab ich mein Element und kann in der funktion:

1. ein neuen Pointer anlegen, der die Datenstruktur für mein Bank-Konto hat

2. Speicher mit malloc reservieren

3. dem pItem die Struktur zuweisen

4. das Item einordnen

Doch hier steig ich gedanklich ein wenig aus. Ich würde einfach meine Funktion addItemToList aufrufen und ihr meine pList und mein pItem übergeben, was ich grad angelegt habe. Weil die Funktion addItemToList meine Struktur nicht kennt muss ich das Ergebnis des Vergleichs übergeben, welcher beispielsweise den Vergleich newItem->Name und pList-pCurr->pItem->Name ausführt. Aber genau hier ist das Problem. Mein newItem hätte das Element ->Name, weil ich es ja grade erst angelegt habe, aber mein pList->pCurr hat es nicht, weil es ja nur ein voird* ist. Aber wie mache ich meinem Programm an der Stelle sonst klar, dass alle pItems von der Struktur konto oder wie auch immer sind.

Ist mein gedankliches Problem zu verstehen? Ich kann sonst leider nichts posten, weil das alles erstmal Überlegungen auf nem Blatt Papier sind. Kann mir vielleicht trotzdem jemand helfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weil die Funktion addItemToList meine Struktur nicht kennt muss ich das Ergebnis des Vergleichs übergeben
Du übergibst nicht das Ergebnis des Vergleichs. Du übergibst den Zeiger auf eine Funktion, die zwei Einträge vergleichen kann. Diese Funktion kennt deine Elemente natürlich. Die übergebene Funktion wird in addItemToList vermutlich mehrfach aufgerufen, um den neuen Eintrag richtig einzuordnen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, so hatte ich mir das gedacht. :)

Ich hab schon gefunden, was ich gesucht hatte:



int fcmp(void *ele1,void *ele2)
{
return strcmp( ((tPhoneEntry*)ele1)->Name, ((tPhoneEntry*)ele2)->Name );
}
[/PHP]

Ich wusste nicht, dass ich dem Programm auf die Weise verklickern kann, dass ich dem eine bestimmte Struktur übergebe, da hab ich wohl mal geschlafen ^^

Vielen Dank!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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