• 27.08.2025, 21:34
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Oetsch

God

Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 17:10

Hy zusammen
ich versuche gerade mich etwas auf nen kleinen Test nächste Woche vorzubereiten indem ich irgendwas in c programmieren muß. So jetzt bin ich beim Thema verkettete Liste und blick da irgendwie nicht durch. Vielleicht kennt sich ja jemand gut mit sowas aus und könnte mir ein paar Tips geben.

Also ich möchte ein kleines Test Programm haben, wo man einen Namen eingibt + Alter der Person.
dieses wird dann in einem struct abgelegt(im Speicher).
dann nach abfrage noch eine eingabe.
ja dann weiter
usw usw
das Prob tritt ja dann erst richtig auf, wenn ich die sache
sortieren möchte und zB die eingebene Liste nach alter sortiert ausgegeben haben möchte.
bis jetzt bin ich soweit: (häng ich ans Ende)

Wäre toll wenn mir jemand ein paar Tips oder links dazu geben könnte. Vielen Dank
Ö

(Programm/ nicht wundern ist noch Chaos usw drin):
# include <stdio.h>
# include <stdlib.h>


struct person{char name[15];int alter;struct person *ptr;};


int main (main){
char hilf[1];
struct person *pstart,*phupf pers;
pstart=(struct person*)malloc(sizeof(struct person));
phupf=pstart;
do{
printf("Name=?\n");
scanf("%s",pers.name);
printf("Alter=?\n");
scanf("%d",&pers.alter);

printf("Noch eine Eingabe? j oder n");
scanf("%s",hilf);

}while(hilf[0]!='n');

return 0;
}

hurra

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 17:20

Hi

Hab sowas auch schonmal programmiert. Ich würde es ein bisschen anders machen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct bla
{
 char name[100];
 int alter;
 bla *next;
} ;

int main()
{
 bla *person=(strucht *bla)malloc(sizeof(bla));


 strcpy(bla->name,"erster name");
 bla->alter=4;
 bla->next=(struct *bla)malloc(sizeof(bla));
 bla=bla->next;
 .
 .
 . 
 return 0;
}

Cu Hurra
}

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 17:28

Hy dank Dir für die Antwort.
Ich versuchs gerade zu kapieren.
könntest vielleicht kurz das strgcopy näher erläutern
und das bla=bla->next ?
Besonders das bla=bla-> next versteh ich gerad nit.

Danke
Gruß
Ö

hurra

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 17:32

Hi

strcpy(a,b); kopiert nur den String b nach a;
du könntest auch einfach scanf("%s",a) verwenden.

bla=bla->next springt praktisch in die nächste Liste hinein.
bla->next ist ja die nächste liste. bla is deine aktuelle.
bla=bla->next setzt deine aktuelle liste bla auf die nächste bla->next;

zurück kommst du mit diesem verfahren allerdings nicht mehr. dafür könnest du noch einen varibale für einen rückwärstsprung einbauen, oder halt einfach die erste Liste irgendwo speichern, und dann immer auf diese zurückgreifen.

Cu Hurra

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 18:11

aahh jetzt versteh ich ich glaube ich etwas
ich versuch mich mal daran und meld mich später nochmal
vielen dank gruß
Ö

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 19:40

Hy
ich hab jetzt ein bisschen rumgespielt aber ganz hab ich es noch nicht geschafft. Könnte vielleicht hier nochmal einer drüber fliegen? pstart soll immer auf dem ersten struct stehen bleiben und phupf immer auf dem aktuellen stehen.

Wie bekomme ich da jetzt ne ausgabe rein?
über die pointer folgendes in den structs müßte ich doch zu jedem einzel struct kommen oder nicht?

Danke Gruß
Ö

# include <stdio.h>
# include <stdlib.h>


struct person {char name[15]; int alter; struct * folgendes;};

int main (void){
char hilf[1];
struct person *pstart=NULL, *phupf=NULL;

pstart= (struct person *) malloc (sizeof (struct person));
phupf=pstart;

scanf("%s",pstart->name);
scanf("%d",&pstart->alter);
do{
printf("Noch eine Eingabe? (j) (n)\n");
scanf("%s",hilf);
phupf->folgendes=(struct person*)(sizeof(struct person));
phupf=phupf->folgendes;
scanf("%s",phupf->name);
scanf("%d",phupf->alter);

}while(hilf[0]!='n');


return (0);
}

hurra

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 19:46

Hi

du müsst anstatt 'struct *folgendes' 'person *folgendes 'schreiben.


Eine Sache mus ich hier noch erwähnen: Alle Angaben ohne Gewär.
Cu Hurra

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 19:50

hy das ging aber fix danke

aber ansonsten meinste ist ok?

mit ohne gewähr ist klar; oder doch nicht; wollte dich gerade verklagen ;D

danke gruß
Ö

hurra

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 19:53

Hi

scanf("%d",&pstart->alter);
->
scanf("%d",pstart->alter);


phupf->folgendes=(struct person*)(sizeof(struct person));
->
phupf->folgendes=(struct person*)malloc(sizeof(struct person);

Cu Hurra

E: Einfach mal ausprobiern, dann siehst eh scho was falsch is.

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 20:00

Hy danke jetzt läuft die eingabe schonmal durch.

Zitat von »hurra«

Hi

scanf("%d",&pstart->alter);
->
scanf("%d",pstart->alter);

gerade da lag der fehler beim zweiten einlesen des alters über phupf da hatte ich das & vergessen. Ist ja ne int Größe.

Zitat von »hurra«


phupf->folgendes=(struct person*)(sizeof(struct person));
->
phupf->folgendes=(struct person*)malloc(sizeof(struct person);


Da hattest du recht schlamperei von mir.
Danke gruß
Ö
ich versuch mich jetzt mal an der ausgabe

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Sonntag, 25. Januar 2004, 20:13

Hy es funtzt vielen Dank
Gruß Ö
Wenn es dich interessiert:

# include <stdio.h>
# include <stdlib.h>


struct person {char name[15]; int alter;struct person * folgendes;};

int main (void){
char hilf[1];
struct person *pstart=NULL, *phupf=NULL, *philf=NULL;

pstart= (struct person *) malloc (sizeof (struct person));
phupf=pstart;

scanf("%s",pstart->name);
scanf("%d",&pstart->alter);
for(;;){
printf("Noch eine Eingabe? (j) (n)\n");
scanf("%s",hilf);
if(hilf[0]=='n')break;
phupf->folgendes=(struct person *)malloc (sizeof(struct person));
phupf=phupf->folgendes;
scanf("%s",phupf->name);
scanf("%d",&phupf->alter);
}

printf("%s\n",pstart->name);
printf("%d\n",pstart->alter);
philf=pstart;

do{
philf=philf->folgendes;

printf("%s\n",philf->name);
printf("%d\n",philf->alter);

}while(philf!=phupf);




return 0;
}

Oetsch

God

Re: Verkettete Liste in C Programmieren?

Montag, 26. Januar 2004, 18:06

Hy nochemal

und die Probz gehen weiter :(

ich versuch jetzt schon wieder ne ganze zeit ne sortierte ausgabe hinzubekommen aber ich weiß nicht wirklich wie.
Ich versuche mir die Ausgabe abhängig vom Alter ausgeben zu lassen, aber da ich vorher die Anzahl der structs nicht kenne brauche ich irgendwie eine unendliche Zahl pointer um das sortieren zu können. Sowohl wenn ich die structs sortieren lasse wenn sie alle eingegeben sind, als auch wenn ich direkt sortiere nach der Eingabe.

In einem anderen Forum bekam ich den Tip bubble sort.
Alllerdings find ich in meiner Literatur nichts dazu und im Netz ists alles recht kompliziert mit unterprogrammen usw erklärt.

Hätte da vielleicht noch jemand ein Tip für mich wie man sowas vom Prinzip macht?

Mein Prinzip so sortiert nur das erste mit dem zweiten struct nach alter.

danke
Ö
# include <stdio.h>
# include <stdlib.h>


struct person {char name[15]; int alter;struct person * folgendes;};

int main (void){
char hilf[1];
int x=0,y=0,z=0,q=0;

struct person *pstart=NULL, *phupf=NULL, *philf=NULL, *ptr=NULL;

pstart= (struct person *) malloc (sizeof (struct person));
phupf=pstart;


//Eingabe
scanf("%s",pstart->name);
scanf("%d",&pstart->alter);

for(;;){
if (q=1){printf("Noch eine Eingabe? (j) (n)\n");
scanf("%s",hilf);}
if(hilf[0]=='n')break;
phupf->folgendes=(struct person *)malloc (sizeof(struct person));
phupf=phupf->folgendes;
scanf("%s",phupf->name);
scanf("%d",&phupf->alter);
q=1
}




//Sortierung


philf=pstart;
x=philf->alter;
phupf=philf->folgendes;
y=phupf->alter;
if (x>y){
pstart=phupf;
phupf=pstart->folgendes;
philf->folgendes=phupf;
pstart->folgendes=philf;
}


// Ausgabe
printf("%s\n",pstart->name);
printf("%d\n",pstart->alter);
philf=pstart;

do{
philf=philf->folgendes;
printf("%s\n",philf->name);
printf("%d\n",philf->alter);
}while(philf!=phupf);




return 0;
}