Problem mit verketteter Liste



  • Hallo ich soll für die Schule eine Liste in C++ entwerfen, die mir Name, Vorname und Alter ausgibt. Mein Tutor hat mir für die umsetzung den Code "typedef struct {char Name[29], char Vname[20],int Alter }DatenTp" gegeben. Nur leider hakt es immer bei der Umsetzung und somit habe ich es erst mal mit normalen Zahlen gemacht, was auch klappt hier der Code:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int v=0;
    typedef int DatenTp;
    struct KnotenTp{DatenTp Data; KnotenTp* Next;} ;
    class Liste
       {
       private:
       KnotenTp* Head;
       KnotenTp* UL;			//Unterliste
       KnotenTp* Tail;
    
       void Init(DatenTp);	//erschafft Liste
       void Pfeil(KnotenTp* Von, KnotenTp* Nach);//setzt Pfeil von -> nach
       bool NotEoL();       //schaut ob noch in der Liste
       KnotenTp* Bilden(DatenTp); //erschafft neue "Kiste"
    
       public:
       Liste();					//liste wird initialisiert
       ~Liste();            //liste wird aus speicher gelöscht
       bool end();				//siehe NotEoL
       KnotenTp* Weiter();  //setzt UL ein weiter
       void Anfuegen(DatenTp);//fügt neuen kasten an
       DatenTp HoleDaten(); //holt daten, die dort stehen
       void Begin();        //setzt UL auf Head
    
      } ;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    
    KnotenTp* Liste::Weiter()
    	{
            if (NotEoL()) UL=UL->Next;
            return UL;
       }
    
    void Liste::Begin()
    	{
            UL=Head;
       }
    
    void Liste::Pfeil(KnotenTp* Von, KnotenTp* Nach)
    	{
            Von->Next=Nach;
       }
    
    bool Liste::NotEoL()
    	{
            return UL->Next!=Tail;
       }
    
    KnotenTp* Liste::Bilden(DatenTp D)
    	{
            KnotenTp* NeuKnoten;
            NeuKnoten=new KnotenTp;
            NeuKnoten->Data=D;
            NeuKnoten->Next=0;
            return NeuKnoten;
       }
    
    void Liste::Init(DatenTp Data)
    	{
            KnotenTp* Tail;
            Head=Bilden(Data);
            Tail=Bilden(Data);
            Pfeil(Head,Tail);
            UL=Head;
       }
    
    DatenTp Liste::HoleDaten()
    	{
            return UL->Next->Data;
       }
    
    void Liste::Anfuegen(DatenTp D)
    	{
            KnotenTp* NeuKnoten;
            NeuKnoten=Bilden(D);
            Pfeil(NeuKnoten,UL->Next);
            Pfeil(UL,NeuKnoten);
    
       }
    
    bool Liste::end()
    	{
            return UL->Next->Next!=0;
       }
    
    Liste::Liste()
    	{
            Init(1);
       }
    Liste::~Liste()
    {}
    Liste list;
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    list.Begin();
    Memo1->Clear();
    for(int i=0;i<v;i++)
    {
    Memo1->Lines->Add(list.HoleDaten());
    list.Weiter();
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    
    list.Anfuegen(Edit1->Text.ToInt());
    v=v+1;
    }
    //---------------------------------------------------------------------------
    

    Bitte um Hilfe, wie ich daraus eine Ausgabe machen kann, die Namen beeinhaltet.



  • Wo ist das Struct mit Name, Vorname etc?



  • Ich versteh Dein Problem nicht. DatenTp ist doch vorgegeben:

    typedef struct {char Name[29], char Vname[20],int Alter }DatenTp
    

    Setz das mal für

    typedef int DatenTp;
    

    ein.


Anmelden zum Antworten