Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dynamische Liste aufbauen

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
16.12.2004, 16:38 Uhr
~Gast
Gast


Hallo,

ich will zur Übung in C eine Aufgabe zum Thema dynamische Listen lösen. Habe so etwas bisher noch nie gemacht und weiß deshalb auch gar nicht so richtig wie ich überhaupt anfangen soll. Die Aufgabe verstehe ich auch nicht wirklich und deshalb stelle ich sie einfach mal hier ins Forum. Hoffe mir kann da jemand helfen.

Also nun zur Aufgabe:

Schreiben Sie ein C-Programm, dass die folgende Listenstruktur generiert. Dazu sind die entsprechenden Typdefinitionen, Deklarationen und Anwesungen zu programmieren. Beachten Sie, dass die Namen für die Komponenten der Verbunde und die Objekte bei Verweisen mit Zeigern stimmen. Die Werte, die in der Liste gespeichert werden, sollen von einer Datei im Textformat eingelesen werden.

Die Datei enthält zunächst die Anzahl der Listenelemente, dann die Folge der Werte und anschließend jeweils immer 3 Verweise auf die Listenelemente. Bei den Referenzen bedeutet ein Ref-Wert von 1 ein Verweis auf das erste Listenelement, und "-99" bedeutet "keine Referenz". Die eingelesenen Werte und die Referenzen werden nach dem Eintrag in die dynamische Liste auf dem Bildschirm und in eine Datei (Textformat) ausgegeben.

Beispiel einer Eingabedatei für 4 Listenelemente: 4 3 1 7 -2 3 2 3 4 1 2 2 2 3 1 4 3

Hier der Aufbau als Grafik:

www.ginko.de/user/bardeli/PROG.gif
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.12.2004, 21:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn in der date schon die anzahl der elemente steht die darin enhalten sind brauchst du keine liste verwenden sondern kannst den speicher mit malloc allokieren...

an sonsten such mal mit der forumssuche nach liste da sind massenweise beispiele und wenn du dann nicht weiterkommst frag mal konkreter nach wo du was nicht verstehst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.12.2004, 09:58 Uhr
~Gast
Gast


Habe eine Frage zu dem Beispiel mit Grafik.

Es geht da ja um 4 Listenelemente. Wäre ein Listenelement dann so ein Päckchen von (wert,next,ref1,ref2,ref3) ?

Dann die folge der Werte müßten ja die Zahlen (3 1 7 -2) sein. Werden diese Werte dann bei den Listenelementen in wert eingetragen?

3 2 3 wären dann die Werte des ersten Listenelement für Ref1, Ref2, Ref3?
4 1 2 wären dann die Werte des zweiten Listenelement für Ref1, Ref2, Ref3?
2 2 3 dann für das dritte Listenelement und
1 4 3 für das vierte Listenelement?

Angenommen im ersten Listenelement bei Ref1 steht die 3. Heißt es dann, das Ref1 auf das dritte listenelement Zeigt?
In der Grafik ist bei Ref2 kein Zeiger oder? wenn da jetzt die 2 drin steht, was passiert dann da?
Bedeutet -99 kein Verweis auf ein Listenelement weil es überhaupt nicht negativ sein kann also das kleinste kann 0 sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.01.2005, 12:05 Uhr
~Gast
Gast


Habe bisher folgenden Quelltext:


C++:
/* Listenstruktur wird erstellt. Neuer Typ: typ_liste */
struct typ_liste {
                  int wert;
                  struct typ_liste *next;
                  struct typ_liste *Ref1;
                  struct typ_liste *Ref2;
                  struct typ_liste *Ref3;
                 };

/* Zeiger vom Typ typ_liste auf erstes Element */
struct typ_liste *Ref3Li;
struct typ_liste *element; /* Zeiger element vom Typ typ_liste    */

void DateiVerarb (void)
{
FILE *datei_ein_z;
int elemente, wert, ref1, ref2, ref3, i;
if ((datei_ein_z= fopen ("REF3LI.EIN", "rt")) == NULL)
   {
    printf("Datei kann nicht geoeffnet werden!\n");
   }
else
   {
    printf("Datei wurde geoeffnet!\n");
    fscanf( datei_ein_z, "%d",&elemente);
    printf("\nAnzahl der Elemente: %d",elemente);
    printf("\nWerte: ");
    for(i = 1; i <= elemente; i++)
      {
       fscanf(datei_ein_z,"%d",&wert);
       element= (typ_liste*)malloc(sizeof(typ_liste));
       element->wert= wert;
       element->next= NULL;
       struct typ_liste *tempZeiger= Ref3Li;
       while (tempZeiger->next != NULL)
         {
          tempZeiger= tempZeiger->next;
         }
       tempZeiger->next= element;
       printf("%d ",element->wert);
      }
    printf("\nRefers: ");
    element= Ref3Li;
    for(i = 1; i <= elemente; i++)
      {
       fscanf(datei_ein_z,"%d %d %d",&ref1, &ref2, &ref3);
       element->Ref1= ref1;
       element->Ref2= ref2;
       element->Ref3= ref3;
       printf("%d %d %d",element->Ref1, element->Ref2, element->Ref3);
       element= element->next;
      }    
   }
}



Es werden also Zahlen aus einer Datei gelesen. Die erste Zahl ist die Anzahl der Elemente. So oft wie Elemente vorhanden sind wird für diese Elemente mit malloc Speicher im heap freigemacht und wert wird in wert eingetragen. In der Datei hängt die Anzahl der Werte von der Anzahl der Elemente ab.
Dann fehlen noch die Refers. Ich lese also aus der Datei z.B. die Zahl 2 aus. Dies soll dann bedeuten, dass auf das 2. Element verwiesen werden soll.
Ich weiß das ich hier nur die Zahl einlese, diese müßte ich aber dann in die Adresse des Elements umwandeln richtig? Habe also in der unteren Schleife noch einen Fehler und blicke da auch noch nicht so ganz durch.
 
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: