Verkettete Liste, wie mehrere Nachfolger Dynamisch deklarieren?



  • Moin Moin,

    ich habe folgende Struktur für meine Liste:

    typedef struct baum			
    {
    	char szName[100];	     // speichert den Namen.
    	baum *pnaechster[200]; //Zeigt auf einen der Kinder
             baum *pvorgaenger;	    // Zeiger auf den Vorgänger.
    }baum;
    

    Also pnaechster[200] zeigt auf einen der Nachfolger. Ich möchte aber das die größe des Arrays dynamisch erzeugt wird, da ich bei Programmstart nicht weiss wieviel Nachfolger ein einzelnes Element hat. Bsp. pnaechster[n]. Wie kann ich dies machen?

    Viele Grüße 😉



  • falsches Board

    struct baum           
    {
        char szName[100];         // speichert den Namen.
        baum *pnaechster[200]; //Zeigt auf einen der Kinder
             baum *pvorgaenger;        // Zeiger auf den Vorgänger.
    };
    

    das reicht auch so

    wenn du's dynamisch willst nimm doch std::vector um die Zeiger zu speichern



  • C oder C++? 😕



  • estartu_de schrieb:

    C oder C++? 😕

    ?? wie meinen ?? wenner vector nimmt wäre C++ angesagt 🙂



  • Dieser Thread wurde von Moderator/in estartu_de aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Gibt es da noch andere Möglichkeiten ausser mit std::vector? Weil ich schon andere Funktionen fertig hab, die mit dem Array arbeiten 😕



  • Habe ein wenig rumgespielt, bin jetzt aber total verwirrt 😞

    Im Header ist pnaechster[1]!

    typedef struct baum			
    {
    	char szName[100];// speichert den Namen.
    	baum *pnaechster[1]; //Zeigt auf einen der Kinder
        baum *pvorgaenger;	    // Zeiger auf den Vorgänger.
    }baum;
    

    In der cpp ist folgendes:

    if(anker == NULL) //Wenn noch keine Strukturen
    	{
    
    		anker = new baum; //baum *anker;   
    		strcpy(anker->szName,"Life");	//Nen Namen reingeben
    		anker->pvorgaenger = NULL;//Erster hat keinen Vorgänger
                    ///////////////////////////////////////////////////////
                    pWorker = anker;//Arbeitszeiger benutzen. 
    		pWorker->pnaechster[0] = new baum;//An 0 ne neue Struktur
    		pWorker->pnaechster[0]->pvorgaenger = pWorker;//Auf den Vorgänger 
    		pWorker = pWorker->pnaechster[0];//pWorker aufs neue Element 
    		strcpy(pWorker->szName,"ErstesKind");
                    ///////////////////////////////////////////////////////
                    pWorker = anker; //Wieder auf das erste Element zeigen.
    		pWorker->pnaechster[1] = new baum;//An 1 ne neue Struktur
    		pWorker->pnaechster[1]->pvorgaenger = pWorker;//Auf den Vorgänger 
    		pWorker = pWorker->pnaechster[1];//pWorker aufs neue Element 
    		strcpy(pWorker->szName,"ZweitesKind"); 
                    ///////////////////////////////////////////////////////
                    pWorker = anker; //Wieder auf das erste Element zeigen.
    		pWorker->pnaechster[2] = new baum;//An 2 ne neue Struktur
    		pWorker->pnaechster[2]->pvorgaenger = pWorker;//Auf den Vorgänger 
    		pWorker = pWorker->pnaechster[2];//pWorker aufs neue Element 
    		strcpy(pWorker->szName,"DrittesKind"); 
                    //... usw.
    

    Also im Header steht doch pnaechster[1]. Warum kann ich in der cpp pnaechster[2] nehmen? Debuggen funktioniert, gibt es dabei irgendwo Speicherfehler? 😮 😕

    Grüße!



  • Steig auf std::vector um.... wenn du schon Schwierigkeiten mit dem Index hast...

    Außerdem ist der []-Operator beim Vector überladen.



  • Das ist total undefiniert.
    Du überschreitest das Array.
    Und schreibst in irgendeinen Speicher rein.
    Irgendwann fliegt dir das Ding dann
    aber auch um die Ohren, spätestens wenn du
    es beim Kunden präsentierst 😉



  • Gut dann werd ich es mit vector machen 🙂 Vielen Dank für die Hilfe!

    Also ist das ein guter Anfang:

    typedef struct baum            
    { 
        char szName[100];// speichert den Namen. 
        //baum *pnaechster[1]; //Weg damit
        vector<baum*>naechster; //<-- Yop
        baum *pvorgaenger;        // Zeiger auf den Vorgänger. 
    }baum;
    

    Grüße!


Anmelden zum Antworten