einfach verketette Listen in C

F

Fr3eMaN

Neues Mitglied
Thread Starter
Dabei seit
30.11.2007
Beiträge
16
Reaktionspunkte
0
Hallo ich versuche mir grad verketette Listen beizubringen, aber irgendwie crasht das programm sobald ich mehr als einen wert eingebe.
Komm überhaupt nicht weiter, hier der code
Code:
#include <stdio.h>
#include <stdlib.h>

typedef struct list *ptr;
typedef struct list{
	int wert;
	ptr next;
}liste;


void add(ptr *p,int wert){
	ptr hilf;
	if (p != NULL ) {
		hilf = (ptr)malloc(sizeof(liste));	
		hilf->wert = wert;
		*p = hilf;
	}		
}

int ausgabe( ptr *p){
	while( (*p)->next == NULL ){
		return (*p)->wert;
		ausgabe(&(*p)->next);
		
	}	 
}

int main (int argc, const char * argv[]) {
	int i,wert;
	ptr *l;
	for (i=1;i<2;i++){
		add(&(*l),i);
	}	
	
	wert = ausgabe(&(*l));
	printf("%i\n",wert);
	getchar();
	return 0;
	
}
Bin mir im klaren das ich die ausgabe der werte aus der liste mal üerhaupt nicht realisieren konnte. Ich dachte man könnte das über eine while schleife umsetzen und dann einfach überprüfen ob *p->next != NULL . Naja schreibt mal nen bisschen was dazu. danke euch
Mfg Fr3eMaN
 
Hallo Fr3eMaN,

ohne überheblich erscheinen zu wollen. Da ist so einiges Falsch.

Fangen wir mal an. Dein Forschleife wird nur einmal durchlaufen. Die Bedingung müsste i<=2 sein! In deiner Liste landet deswegen auch nur ein Wert.

Dann setzt du nie einen Next-Zeiger.

Und deine Ausgabe ist falsch. Zum einen brauchst du da keine While-Schleife, da if reicht. Zum anderen wird beim ersten return sofort aus deinem Unterprogramm raus gesprungen. Das nächste Element in deiner Liste wird dann gar nicht ausgewertet.

Ich habe mal das ganze Programm umgeschrieben, so daß es jetzt lüppt.

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

typedef struct list *ptr;
typedef struct list{
	int wert;
	ptr next;
}liste;

ptr add(int wert){
	ptr hilf;
	hilf = (ptr)malloc(sizeof(liste));	
	hilf->wert = wert;
	return hilf;
}

void ausgabe(ptr p){
	if( p != NULL ){
		printf("%i\n", p->wert);
		ausgabe(p->next);
	}
	return;
}

int main (int argc, const char * argv[]) {
	int i;
	ptr l = NULL, tmp = NULL;
	for (i=1; i<=2; i++) {
		tmp = l;
		l = add(i);
		l->next = tmp;
	}	
	
	ausgabe(l);
	//printf("%i\n",wert);
	return 0;
}

Ach so. Wenn du die Zahlen in umgekehrter Reihenfolge ausgegeben haben willst, dann schreibst du das Unterprogramm "ausgabe" folgendermaßen um:
Code:
void ausgabe(ptr p){
	if( p != NULL ){
		ausgabe(p->next);
		printf("%i\n", p->wert);
	}
	return;
}

Voila ;-)

Gruß Fabian
 
dank dir. Hatte vornerein über die For schleife auch nur 1 Wert eintragen lassen da sich sonst das Programm aufgehangen hat...haste sicherlich gemerkt ;). Ich schau mir mal deine Arbeit an und danke dir schonmal im Vorraus!
mfg Fr3eMaN
 
Zurück
Oben Unten