Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verkettete Listen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.10.2003, 11:07 Uhr
~the.messias
Gast


Hi Leute,
ich bins mal wieder. Ich habe gerade festgestellt, dass ich einen logischen Fehler in meinen verketteten Listen habe.
Ich habe eine Struktur. Diese enthält eine weitere Struktur. Nun hab ich in beiden Strukturen einen next und einen previos pointer. In meinem Hauptprogramm habe ich eine Schleife, die die erste Struktur als verkettete Liste immer erweitert. Jedoch kommt in dieser Liste in einem Element das andere Struct auch mehrmals vor...am besten ich mache dazu mal ein Quelltextbeispiel:

C++:
//also das struct2 kann mehrmals in s_ticket vorkommen, anzahl ist unbekannt
struct s_ticket
{
        char element1[3];
        struct2 unterelement;
        s_ticket *next;
        s_ticket *prev;
            
};
struct struct2
{
      char element1[3];
        struct2 *next;
        struct2 *prev;

};





C++:
s_ticket *tkt = new s_ticket;
        tkt->prev_ticket = NULL;
        tkt->next_ticket = NULL;
        do
        {
               //Hier weise ich tkt->element1 einen wert zu
               struct2 *s2 = new struct2;
               s2->next = NULL;
               s2->prev = NULL;
               if (wenn vorhanden, dann mach das)
               {
                      do
                      {
                              //hier weise ich s2->Element1 einen wert zu
                              s2->next = new struct2;
                              s2->next->prev = s2;
                              s2 = s2->next;
                              s2->next = NULL;
                      } while (Abbruchbedingung);
               }
                      
               //Pointer um das nächste Element der Kette zu erzeugen
               tkt->next_ticket = new s_ticket;
               tkt->next_ticket->prev_ticket = tkt;
               tkt = tkt->next_ticket;
               tkt->next_ticket = NULL;
        }while (Abbruchbedingen);
//Diese Grundstruktur funktioniert so



So ungefähr sieht das Programm aus. Funktioniert auch soweit. Nur, dass auf diese Weise struct2 kein Element von struct1 also s_ticket ist, oder??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.10.2003, 11:25 Uhr
~the.messias
Gast


warum kann ich mich eigentlich nicht mehr einloggen???

THX

mfg Marcel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.10.2003, 11:57 Uhr
0xdeadbeef
Gott
(Operator)


Du musst struct2 vor s_ticket definieren. Also etwa so:

C++:
struct struct2 {
  char element1[3];
  struct struct2 *prev, *next;
};

struct s_ticket {
  char element1[3];
  struct struct2 utnerelement;
  struct s_ticket *prev, *next;
};


In C++ mögen auch ein paar andere Dinge durchgehen, sowas wie "struct2" statt "struct struct2", aber naja. Was den Rest des Codes angeht, in dem Moment, in dem du

C++:
s_ticket *tkt = new s_ticket;


aufrufst, hat tkt schon ein Unterelement von Typ struct2, nämlich tkt->unterelement. Ich nehme an, was du willst, ist

C++:
struct s_ticket {
  char element1[3];
  struct struct2 *unterliste;
  struct s_ticket *prev, *next;
};


Dann kannst du nachher

C++:
struct2 *s2 = new struct2;
//...
s_ticket->unterliste = s2;


machen.
Einloggen kannst du dich wahrscheinlich nicht mehr, weil du zu lange nicht mehr da warst und der Account abgelaufen ist. Das, oder du hast dein Passwort vergessen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.10.2003 um 12:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.10.2003, 12:33 Uhr
~the.messias
Gast


ne...hab mich ja erst die woche registriert und wenn ich mich einlogge bin ich trotzdem als gast drin.
Naja zum Thema:
Ich hatte das ja schon mit einem Array, aber da ist ja die Anzahl des Speichsplatzes fest. Genau an dieser Stelle sollte dann noch eine verkettete Liste entstehen, wenn das geht.
Also bei jedem neuen Ticket können unbegrenzt viele unterelemente enthalten sein.

mfg marcel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.10.2003, 12:34 Uhr
~the.messias
Gast


ach ne, das hast du ja so gemacht...werde ich gleich mal so ausprobieren...
danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.10.2003, 12:51 Uhr
~the.messias
Gast


so...scheint zu funktionieren.
Und jetzt kann ich auf jedes Unterelement eines Tickets seperat zugreifen???
Ist das dann jetzt eigentlich sowas wie eine Baumstruktur???

mfg Marcel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.10.2003, 15:17 Uhr
0xdeadbeef
Gott
(Operator)


Wahrscheinlich lehnst du Cookies ab (Gut so!). Gib im Anmeldescreen ein, dass du dich per PHP-Session einloggen willst.

Deine Struktur ist kein Baum. Ein Baum ist eine rekursive Struktur, das heißt, wenn dein s_ticket einen Zeiger auf eine weitere Liste von s_tickets enthielte, hättest du einen Baum (einen B-Baum, um genau zu sein). Was du da hast, ist eine Liste von Listen.

Übrigens - wenn du C++ programmierst, frage ich mich zwei Dinge...erstens, warum schreibst du noch im C-Stil, also ohne Methoden, und zweitens, warum benutzt du nicht die STL?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: