Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

08.01.2004, 20:40

Dynamische Datenstrukturen

Hallo!

Mein Name ist Markus. Ich habe eine Frage.
Mein C-Compiler: Visual Studio6.0

Habe folgenden Code compiliert

Datei struktur.h
struct mannschaft
{
char name[30];
struct mannschaft *next;
};


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struktur.h"

void ausgabe(struct mannschaft *zeiger);
void hinzu(char name[], struct mannschaft *zeiger);

struct mannschaft *anfang=NULL;

int main()
{
char name[30];
int wert, anzahl;

do
{
printf("Bitte geben Sie die Anzahl an Mannschaften ein: ");
wert=scanf("%d", &anzahl);
fflush(stdin);
}
while(wert<1);

while(anzahl>0)
{

do
{
printf("Bitte Namen eingeben: ");
wert=scanf("%s", &name);
fflush(stdin);
}
while(wert < 1);

hinzu(name, anfang);

--anzahl;
}

ausgabe(anfang);

return 0;

}

void hinzu(char name[], struct mannschaft *zeiger)
{
if(zeiger == NULL)
{
zeiger=(struct mannschaft *) malloc(sizeof(struct mannschaft));

if(zeiger==NULL)
{
printf("Nicht genug Speicher vorhanden");
return;
}
else
{
strcpy(zeiger->name, name);
zeiger->next=NULL;
}
}
else
{
hinzu(name, zeiger->next);
}
}

void ausgabe(struct mannschaft *zeiger)
{
if(zeiger!=NULL)
{
printf("%s\n", zeiger->name);
ausgabe(zeiger->next);
}
}


Es soll eine einfache verkette Liste werden.
Ich möchte alle Einträge in die Kette einfügen.
Aber irgendwie funtkioniert es nicht!
Ich weiß nicht wieso.
Kann mir jemand weiterhelfen????
Bin für jede Hilfe dankbar

Mfg Markus

2

09.01.2004, 19:15

..

Hallo Markus,

du setzt zwar eine Variable für den Anfang an. Aber den Startwert setzt du nie. Wie sollte also bei der Ausgabe der Datensatz gefunden werden?

Nach der Abfrage der Anzahl solltest du vielleicht noch ein dynamisches Array anlegen. In dem Array speicherst du dann die Pointer für dein struct und kannst jeden Datensatz dadurch anspringen.

Als Tip hätte ich sonst noch diese Links:
http://www.c-programme.de/
http://www.ipsi.fraunhofer.de/~thiemert/…loads/lsg_6_1.c

Wenn's nicht klappt, sag nochmal bescheid.

Gruß David

3

10.01.2004, 10:22

Listen

Hallo!

Ist es möglich die Einträge in die Liste rekursiv einzutragen?
Ich möchte einen globalen Zeiger anfang auf Null setzen.
Bei dem ersten Aufruf der Einfügefunktion soll die Adresse des Anfangszeigers übergeben werden. Zeigt dieser Zeiger auf NULL soll er auf eine neue Speicherstelle zeigen und diese zugewiesen bekommen(malloc).Ansonsten ruft sich die Funktion mit zeiger->next auf und setzt den Zeiger auf eine neue Speicherstelle.

Ist das möglich?

Mfg

Markus

4

10.01.2004, 10:43

möglich ist vieles

Hi Markus,

wenn man es unbedingt will kann man da sicher auch eine Rekursion mit einbauen. Aber wiso? Ich habe mich immer wenn es möglich war um Rekursive Funktionen gedrückt ;-)

Bei deiner Globalen Variablen bin ich mir nicht so ganz sicher was du meinst.
Willst du eine wie in deinem Programmcode (oben) eine setzten? In dem Fall hast du ein Problem. Und zwar weißt du dann eine Pointeradresse. Aber du hast ja eine Liste und bräuchtest doch auch die anderen Speicherstellen oder zumindest noch irgendwo die Gesamtanzahl aller Datensätze. Denn mit C kann man immer schön im Speicher rumspielen, kann sich dabei aber auch schnell "vergreifen".

Gruß David

Thema bewerten